Django-如何从模型中选择特定列?
我四处嗅了嗅,所以找不到这个,但我肯定它就在这里的某个地方。抱歉,这可能是双重职位 如果我有此代码:Django-如何从模型中选择特定列?,django,Django,我四处嗅了嗅,所以找不到这个,但我肯定它就在这里的某个地方。抱歉,这可能是双重职位 如果我有此代码: return Story.objects.filter(user=request.user.id).order_by('-create_date') 假设Story有一个“description”字段,我只需要这个description字段,数据库不需要将任何其他内容与我的结果一起发送回来,我如何将查询限制在这个范围内 也就是说,如何生成此SQL: select description fro
return Story.objects.filter(user=request.user.id).order_by('-create_date')
假设Story有一个“description”字段,我只需要这个description字段,数据库不需要将任何其他内容与我的结果一起发送回来,我如何将查询限制在这个范围内
也就是说,如何生成此SQL:
select description from story where user_id = x order by create_date desc
(其中x当然是request.user.id值)使用values()
或values\u list()
如果您使用values()
,您将得到一个字典列表(从技术上讲是ValuesQuerySet
)
如果您使用values\u list()
,您将得到一个元组列表
instance = MyModel.objects.values_list('description')[0]
description = instance[0]
或者,如果您在本例中仅获得一个值,您可以使用flat=True
kwarg和values\u list
来获得一个简单的值列表
description = MyModel.objects.values_list('description', flat=True)[0]
请参见使用。请阅读文档,因为文档中说,如果您的查询集只生成一个对象,建议您使用get()而不是filter。根据您给出的名称,我假设每个用户的user_id都是不同的。 EDIT1:我刚刚注意到orderby子句。因此,我建议在用户id不同或带有pk的情况下使用此代码
description = story.objects.filter('description').get(user_id=x)
正确:
return Story.objects.filter(user=request.user.id)。order_by('-create_date')。value('description')
@bharal很多时候,我发现值列表比元组列表更有用。您可以将flat=True
传递到values\u list
以获得一个值列表。这实际上也会发回pk
,从我刚刚阅读的文档中可以看出:defer()方法(及其表亲,下面的only())仅适用于高级用例。当您仔细分析查询,准确了解所需信息,并测量返回所需字段与模型的完整字段集之间的差异将非常显著时,它们为您提供了优化。问题的可能重复之处在于如何选择特定的列值使用Django ORM从给定的表中。
description = story.objects.filter('description').get(user_id=x)