我不知道怎么问这个但很简单
我有一个名为“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,但我需要来自此对象的另一个属性,如何初始化城市中的状态对象或至少从状态对象获取特定属性。
答案 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'))