35

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

4

3 回答 3

57

使用values()values_list()

如果你使用values(),你最终会得到一个字典列表(技术上是 a ValuesQuerySet

instance = MyModel.objects.values('description')[0]
description = instance['description']

如果你使用values_list(),你最终会得到一个元组列表

instance = MyModel.objects.values_list('description')[0]
description = instance[0]

或者,如果您只是在这种情况下获得一个值,您可以使用flat=Truekwarg withvalues_list来获得一个简单的值列表

description = MyModel.objects.values_list('description', flat=True)[0]

官方文档

于 2012-05-22T15:25:06.947 回答
5

使用唯一的方法。请阅读文档

于 2012-05-22T15:26:24.093 回答
0

正如文档所说,如果您的查询集将只产生一个对象,建议您应该使用 get() 而不是 filter。根据您提供的名称,我假设 user_id 对于每个用户都是不同的。EDIT1:我刚刚注意到 orderby 条款。因此,如果 user_id 不同或带有 pk,我建议使用此代码。

    description = story.objects.filter('description').get(user_id=x)
于 2014-08-18T20:16:45.797 回答