【问题标题】:Django: I want a Queryset as a list. How?Django:我想要一个查询集作为列表。如何?
【发布时间】:2018-02-21 12:51:05
【问题描述】:

我需要在 Django 中获取一个查询集,并以字典列表的形式将其复制为变量。我以为这就是查询集,我想我错了。

listA = User_Item.objects.filter(user=User.objects.get(id=1))

当我尝试用它执行一个简单的算法时给我一个错误。 我不想与数据库交互——我需要将该 Queryset 复制为字典列表,这样我就可以在不实际更改数据的情况下显示列表的修改版本。我该怎么做?

(试图获取此连接表中的条目列表,该列表应该是包含某些键值的字典的字典列表)

【问题讨论】:

  • 您可以将itertools.ifilter 与 lambda 表达式一起使用。
  • values() or values_list()一起使用它对数据库性能非常好,但有时处理起来很丑,因为一切都是硬编码的。 docs.djangoproject.com/en/1.11/ref/models/querysets/#values
  • values(),那不只是从对象中获取值列表吗?我可以,但在模板中使用会有点困难。我正在尝试按原样复制查询集 - 字典(对象)列表。

标签: python django orm django-queryset backend


【解决方案1】:

要从查询集中创建一个列表,只需将其传递给列表函数list_a = list(queryset)。这将为您返回一个包含查询集中对象的列表。如果您希望将其作为 dict,您可以在将查询集传递给列表之前调用 values() 方法:list(queryset.values())

【讨论】:

    【解决方案2】:

    values()values_list() 都返回 queryset object,这在大多数情况下应该没问题。但是,如果您确实想要一个列表,那么正如前面的答案所述,您将不得不使用函数 list(queryset) 将其类型转换为列表

    将查询集类型转换为列表将消除仅通过使用查询集获得的一些性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2012-07-07
      • 2022-01-12
      • 2021-01-19
      • 2020-12-24
      • 2014-10-06
      • 1970-01-01
      相关资源
      最近更新 更多