我在SO周围嗅了一下,找不到这个,但我确信它在某处。为这个潜在的双重职位道歉!
如果我有这段代码:
return Story.objects.filter(user=request.user.id).order_by('-create_date')
并说故事有一个“描述”字段,而我只是想要那个描述字段,不需要数据库用我的结果发送任何其他内容,我如何限制查询只是那个?
也就是说,我该如何生成这个SQL:
select description from story where user_id = x order by create_date desc
(其中x是request.user.id值,当然)
答案 0 :(得分:43)
使用values()
或values_list()
。
如果你使用values()
,你最终会得到一个词典列表(技术上是ValuesQuerySet
)
instance = MyModel.objects.values('description')[0]
description = instance['description']
如果你使用values_list()
,你最终会得到一个元组列表
instance = MyModel.objects.values_list('description')[0]
description = instance[0]
或者,如果你只是得到一个像这种情况一样的值,你可以使用flat=True
kwarg和values_list
来获得一个简单的值列表
description = MyModel.objects.values_list('description', flat=True)[0]
答案 1 :(得分:3)
使用only method。请阅读文档
答案 2 :(得分:1)
正如文档所说,如果您的查询集只产生一个对象,建议您使用get()而不是filter。从您给出的名称,我将假设user_id对每个用户都是不同的。 EDIT1:我刚刚接到了orderby子句的通知。因此,如果user_id不同或者使用pk,我建议使用此代码。
description = story.objects.filter('description').get(user_id=x)