これがまさにあなたが求めているものかどうかはわかりませんが、共有フィールドでクエリを実行するには 2 つの方法が考えられます。
オプション1
まず、モデルの継承を使用して、両方のモデル タイプのオブジェクトを含む 1 つの QuerySet を取得できます。
コード:
class ModelBase(models.Model):
name = models.CharField(max_length=10)
price = models.FloatField()
class ModelA(ModelBase):
field_a = models.BooleanField()
class ModelB(ModelBase):
field_b = models.BooleanField()
それをテストする:
[4]: test_app.models から ModelA、ModelB、ModelBase をインポート
[5]: マッチ = ModelBase.objects.filter(name='Product1')
[6]: マッチ.カウント()
アウト[6]: 2
[7]: 一致する m の場合:
...: print "%s - %s" % (m.name, m.price)
...:
製品1 - 10.5
製品1 - 3.5
オプション 2
または、継承が不要で、QuerySet 全体を評価することを気にしない場合は、itertools を使用できます。
コード
class ModelX(models.Model):
name = models.CharField(max_length=10)
price = models.FloatField()
field_x = models.BooleanField()
class ModelY(models.Model):
name = models.CharField(max_length=10)
price = models.FloatField()
field_y = models.BooleanField()
テストしてみる
from test_app.models import ModelX, ModelY
itertools インポート チェーンから
full_set = chain(ModelX.objects.filter(name='Product2'), Model.Y.objects.filter(name='Product2'))
[5]: full_set = chain(ModelX.objects.filter(name='Product2'), > ModelY.objects.filter(name='Product2'))
[6]: full_set の m の場合:
...: print "%s - %s" % (m.name, m.price)
...:
製品 2 - 14.0
製品 2 - 30.0