self.model.objects.filter(pk=2)[:1].values('name', 'entry__headline')
self.model.objects.filter(pk=2).values('name', 'entry__headline')
为什么第一个不能返回外键字段的所有值,但第二个字段是否可以作为期望值?
首先返回:
QuerySet [{'name': 'My blog', 'entry__headline': 'An entry'}]
第二次回归:
QuerySet [{'name': 'My blog', 'entry__headline': 'An entry'},
{'name': 'My blog', 'entry__headline': 'Another entry'}, ...]
所以就像第一个不能返回外键字段的所有结果一样。
答案 0 :(得分:1)
边缘,
pk(主键)始终是唯一的。这是主键的目的之一。这反过来将有助于索引。所以,我不确定为什么第二个返回查询集中的多个对象。
PS:如果我错了,请纠正我。
答案 1 :(得分:0)
列表切片如何工作,[:1]
表示[0:1]
(从索引0到索引1)并不包括1
:
>>> my_list = [1, 2, 3]
>>> my_list
[1, 2, 3]
>>> my_list[:1]
[1]
>>> my_list[0:1]
[1]
SomeModel.objects.filter(pk__gte=2)[:1]
表示您正在切片QuerySet
,结果是模型实例列表。
SomeModel.objects.filter(pk__gte=2).values('name')[:1]
表示您正在切片ValuesQuerySet
,结果是词典列表。
请看以下示例:
>>> from polls.models import Question
>>>
>>> Question.objects.all()
[<Question: q1>, <Question: q2>, <Question: q3>]
>>> Question.objects.filter(pk__gte=2) # returns QuerySet
[<Question: q2>, <Question: q3>]
>>> Question.objects.filter(pk__gte=2)[:1] # slicing a QuerySet
[<Question: q2>] # list of Question instances
>>>
>>> Question.objects.filter(pk__gte=2).values('question_text') # returns ValuesQuerySet
[{'question_text': u'q2'}, {'question_text': u'q3'}]
>>> Question.objects.filter(pk__gte=2).values('question_text')[:1] # slicing a ValuesQuerySet
[{'question_text': u'q2'}] # list of dictionaries
注意: SomeModel.objects.filter(pk=2)
将始终返回包含1个对象的QuerySet
(在这种情况下,pk = 2)。