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

bha*_*ral 29 django

我在SO周围嗅了一下,找不到这个,但我确信它在某处.为这个潜在的双重帖子道歉!

如果我有这个代码:

return Story.objects.filter(user=request.user.id).order_by('-create_date')
Run Code Online (Sandbox Code Playgroud)

说故事,嗯,一个"说明"字段,我只是想这样的描述字段,无需为DB与我的结果发送任何东西回来了,我怎么限制查询到刚才那个?

也就是说,我该如何生成这个SQL:

select description from story where user_id = x order by create_date desc
Run Code Online (Sandbox Code Playgroud)

(其中x是request.user.id值,当然)

Chr*_*att 45

使用values()values_list().

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

instance = MyModel.objects.values('description')[0]
description = instance['description']
Run Code Online (Sandbox Code Playgroud)

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

instance = MyModel.objects.values_list('description')[0]
description = instance[0]
Run Code Online (Sandbox Code Playgroud)

或者如果你只是得到一个像这种情况的值,你可以使用flat=Truekwarg values_list来获得一个简单的值列表

description = MyModel.objects.values_list('description', flat=True)[0]
Run Code Online (Sandbox Code Playgroud)

  • 正确:`return Story.objects.filter(user = request.user.id).order_by(' - create_date').values('description')` (5认同)
  • @bharal很多次我发现值列表比元组列表更有用.您可以将`flat = True`传递给`values_list`以获取值列表 (4认同)

Goi*_*oin 5

使用only方法。请阅读文档

  • 嗯,从我刚刚读到的文档中: defer() 方法(及其表弟,only(),如下)仅适用于高级用例。当您仔细分析查询并准确了解您需要什么信息并测量返回您需要的字段与模型的完整字段集之间的差异将是显着的时,它们提供了优化。 (3认同)