2017-07-14 52 views
1

我有一个由多个字段组成的Django模型。我只希望选择一个。Djano的唯一()仍然选择每个现有的字段

我只使用()作为,根据文档它应该只返回woodAsked这里的字段。然而,返回的查询集仍将包含Painting模型中的每个字段。

>>> a = Painting.objects.only('woodAsked') 
>>> serializers.serialize("json",a)[1:200] 
'{"model": "binaryQuestionApp.painting", "pk": 3, "fields": {"name": "Getty00052501.jpg", "objectNumber": "00052501.jpg", "collection": "Getty", "title": "pretty after al", "woodAsked": 0, "woodYes": ' 

我该如何选择'woodAsked'字段?

回答

2

您正在寻找valuesvalues_list

a = Painting.objects.values('woodAsked') 
a = Painting.objects.values_list('woodAsked', flat=True) 

只有推迟的其他领域,使之成为让他们没有对初始查询返回的 - 但仍然存在

+1

这正是我一直在寻找。我不明白()似乎。在'a = Painting.objects.only('woodAsked')'中,'a'不代表最初的查询吗?我会认为只有那些'木讷'字段会在那里。 –

+1

@MitchellvanZuylen - 设想一个更复杂的模型,其中可能有数组字段可能需要更长的时间才能返回值。您并不需要这些值,因此在您的查询中找不到任何点。 'only'可以避免多余的读取时间 – Sayse

+4

@MitchellvanZuylen'.only()'仍然会返回模型实例,但是会替换未加载描述符的字段,这些描述符将在第一次访问时从数据库获取字段。这是一个先进的功能,仅用于非常具体的性能调整。你不需要它。 (除非你已经广泛地描述你的应用,并得出结论说你需要它。) – knbk

1

你可以使用valuesvalues_list

OR

如果你只想要领域的一个子集被序列化,你可以指定一个字段参数串行,

data = serializers.serialize('json', a, fields=('woodAsked')) 
相关问题