Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中选择一组相关的对象_Django_Django Models - Fatal编程技术网

在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)
将为您提供结果查询。