66

我有一个这样的查询:

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

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

4

3 回答 3

106

用于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')
于 2013-01-22T10:35:39.563 回答
16

您的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,则会引发异常。

于 2013-01-22T10:47:17.883 回答
2

如果您只想从单个值 QuerySet 中获取值,您可以执行以下操作:

file_s = Share.objects.filter(shared_user_id=log_id).values_list('files_id', flat=True).first()
于 2021-06-02T03:46:28.313 回答