Django - 如何从模型中选择特定列?

时间:2012-05-22 15:16:09

标签: django

我在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值,当然)

3 个答案:

答案 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)