2

次のモデルを検討してください。

#Models
class A(models.Model):
    fieldOfA = models.CharField(max_length = 4)
class B(models.Model):
    fieldOfB = models.CharField(max_length = 4)
class C(models.Model):
    classA = models.ForeignKey(A, blank=True, null=True)
    classB = models.ForeignKey(B, blank=True, null=True)

C のオブジェクトを作成するときは、オブジェクトに classA または classB のいずれかの関係があることを確認します。

特定の fieldOfA または特定の fieldOfB 値に対して C のオブジェクトを取得する単一のクエリセットを探しています。

これを試しましたが、失敗しました (有効な結果があるにもかかわらず、[] を返します)。

#Views - assume double underscore in the query
from django.db.models import Q
my_query = C.objects.filter(Q(classA _ _isnull = False, classA _ _fieldOfA = 'foo') | Q(classB _ _isnull = False, classB _ _fieldOfB = 'foo'))

私が見る問題は「|」です それが適用されます。classA と classB の 2 つの異なるクエリセットが正常に機能します。これを機能させるために単一のクエリセットを適用する方法はありますか? さらに悪いことに、個々のクエリセットをマージする方法です。

4

2 に答える 2

2

実際には、同じ方法でsを組み合わせることができます。QuerySetそのようです:

C.objects.filter(classA__fieldOfA='foo') | C.objects.filter(classB__fieldOfB='foo')
于 2009-07-11T12:56:37.387 に答える