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

use*_*957 41 django

我有这样的查询:

file_s = Share.objects.filter(shared_user_id=log_id)
Run Code Online (Sandbox Code Playgroud)

现在,我想从Django视图中的file_s获取files_id属性.我怎样才能做到这一点?

Roh*_*han 71

使用values()得到特定属性,该属性将返回类型的字典列表,像

file_s = Share.objects.filter(shared_user_id=log_id).values('files_id')
Run Code Online (Sandbox Code Playgroud)

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

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).order_by('id')
Run Code Online (Sandbox Code Playgroud)


Aus*_*ips 8

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

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

for share in files_s:
    print share.files_id
Run Code Online (Sandbox Code Playgroud)

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

share = Share.objects.get(shared_user_id=log_id)
Run Code Online (Sandbox Code Playgroud)

这将返回一个Share实例,您可以从中访问该files_id属性。如果查询返回的结果不是1个结果,则将引发异常。