如何从Query中获取另一个对象内的对象?

时间:2014-06-30 07:14:43

标签: python django

我不知道怎么问这个但很简单

我有一个名为“State”的实体和另一个名为“City”的实体。

我正在进行查询以获取具有给定参数的特定城市:

cities = City.objects.filter(code__exact=12345).values("id","name","state")

然后我序列化列表(或dict?=以便通过JSON获取它们:

for c in cities:
    result.append(c)
return HttpResponse(json.dumps(result))

问题是我只获得状态ID,但我需要来自此对象的另一个属性,如何初始化城市中的状态对象或至少从状态对象获取特定属性。

1 个答案:

答案 0 :(得分:3)

values()来电的结果是ValueQuerySet,这在某些方面很特殊。其中之一是:

  

当您知道自己只需要时,ValuesQuerySet非常有用   来自少数可用字段的值,您将不需要   模型实例对象的功能。它更有效   只选择您需要使用的字段。

粗体部分很重要。这意味着查询集的结果将不具有模型的实例,您必须准确地告诉它您需要获取的内容。

因此,如果您知道结果中所需的状态模型的字段,则可以在值子句中添加它们。如果你只是放state,它会给你一个状态id,这是默认的身份字段。

cities = City.objects.filter(code__exact=12345).values("id",
                                                       "name",
                                                       "state__name",
                                                       "state__id")

如果您这样做只是为了将结果转换为json,请使用内置的serializers

from django.core import serializers
result = serializers.serialize('json',
                               City.objects.filter(code__exact=12345),
                               fields=('id', 'name', 'state__name', 'state__id'))