我不确定这是否正是您要问的,但我可以想到两种查询共享字段的方法。
选项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] 中:matches.count()
出[6]:2
在 [7] 中:对于匹配中的 m:
...: 打印 "%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()
测试一下
从 test_app.models 导入 ModelX,ModelY
从 itertools 导入链
full_set = 链(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] 中:对于完整集中的 m:
...: 打印 "%s - %s" % (m.name, m.price)
...:
产品 2 - 14.0
产品2 - 30.0