在Django中选择一组相关的对象
我有两种型号:在Django中选择一组相关的对象,django,django-models,Django,Django Models,我有两种型号: class ModelA(models.Model): name = models.CharField() class ModelB(models.Model): a = models.ForeignKey(ModelA) value = models.CharField() ModelB始终属于ModelA。我有一个过滤我的modelbss的特定查询: ModelB.objects.filter(value='foo') 从该QuerySet中,我
class ModelA(models.Model):
name = models.CharField()
class ModelB(models.Model):
a = models.ForeignKey(ModelA)
value = models.CharField()
ModelB
始终属于ModelA
。我有一个过滤我的modelbs
s的特定查询:
ModelB.objects.filter(value='foo')
从该QuerySet
中,我需要检索匹配的ModelA
集。所以我试了一下:
>>> ModelB.objects.filter(value='foo').values('a')
[{'a': 2}, {'a': 4}, {'a': 6}]
但正如你所看到的,这只给了我对象
id
s。如何获取对象本身?如果需要ModelAs,必须请求ModelAs
ModelA.objects.filter(modelb__value='foo')
如果你想要ModelAs,你必须要ModelAs
ModelA.objects.filter(modelb__value='foo')
目前我有一个小数字:
model_a_list = ModelB.objects.filter(value='foo').values('a')
ModelA.objects.filter(id__in=model_a_list)
如果有更好的方法,我们将不胜感激。目前我有一个小数字:
model_a_list = ModelB.objects.filter(value='foo').values('a')
ModelA.objects.filter(id__in=model_a_list)
如果有更好的方法,我们将不胜感激。我不知道这是可能的。你能解释一下这个查询产生的SQL吗?它只是一个连接。在shell中自己尝试一下,然后从django.db导入连接执行
;connection.querys
以显示SQL。您还可以通过在QuerySet调用中附加“.query”来查看结果查询是什么。在您的示例中:print str(ModelA.objects.filter(modelbuuu value='foo').query)
将为您提供结果查询。我不知道这是可能的。你能解释一下这个查询产生的SQL吗?它只是一个连接。在shell中自己尝试一下,然后从django.db导入连接执行;connection.querys
以显示SQL。您还可以通过在QuerySet调用中附加“.query”来查看结果查询是什么。在您的示例中:print str(ModelA.objects.filter(modelbuuu value='foo').query)
将为您提供结果查询。