如何从Django中的queryset获取特定属性?

时间:2013-01-22 10:33:51

标签: django

我有这样的查询:

file_s = Share.objects.filter(shared_user_id=log_id)

现在,我想在Django视图中从file_s获取files_id属性。我怎么能这样做?

3 个答案:

答案 0 :(得分:58)

使用values()获取特定属性,该属性将返回您的词典列表,例如

file_s = Share.objects.filter(shared_user_id=log_id).values('files_id')

编辑:如果您只想要一个属性,则可以使用flat=True建议仅返回值列表。但是,请确保列表的顺序。

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).order_by('id')

答案 1 :(得分:5)

您的Share.objects.filter()调用返回一个Djagno QuerySet对象,该对象不是单个记录,而是来自数据库的可迭代过滤对象,每个项目都是Share个实例。您的filter来电可能会返回多个项目。

您可以使用以下循环遍历QuerySet

for share in files_s:
    print share.files_id

如果您知道您的查询只能返回单个项目,则可以执行以下操作:

share = Share.objects.get(shared_user_id=log_id)

将返回单个Share实例,您可以从中访问files_id属性。如果查询返回除1结果之外的任何内容,则会引发异常。

答案 2 :(得分:0)

如果您只想从单个值 QuerySet 中获取值,您可以这样做:

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).first()