【问题标题】:How to get multiple objects of a model without using filter?如何在不使用过滤器的情况下获取模型的多个对象?
【发布时间】:2019-04-26 21:10:47
【问题描述】:

在 Django 2.2 中,我们可以使用 filter() 来获取已创建对象的 QuerySet。使用list(),我可以获得QuerySet 的列表。

为了获得模型的实例,我可以使用函数get(),例如MyModel.objects.all().get(name__exact="John")。但是,get() 函数仅适用于查找单个对象。如果 if 找到 2 个或更多对象,则返回异常:MultipleObjectsReturned get() returned more than one

由于我需要处理我的模型的多个对象及其属性,我想获取一个对象列表。可能吗?例如,我想从属性名称中包含 John 的所有对象中创建一个年龄列表。

如果没有,我如何从MyModel.objects.all().filter(name__exact="John") 访问返回的查询集的属性(例如年龄)?

谢谢。

【问题讨论】:

  • 我不明白你的问题。你已经有点答案了。通过执行Model.objects.filter(...),您将拥有一个行为类似于列表的查询集。这将按照给定的标准返回多个对象。如果您需要一个显式列表,您可以将该查询集包装在 list() 中,就像您已经知道的那样。您可以遍历您的查询集并处理您需要的内容。
  • 好吧,我不知道 QuerySet 的行为就像一个列表。谢谢 Higor

标签: django django-queryset


【解决方案1】:

使用values:

instances = MyModel.objects.filter(name__exact="John")
ages = instances.values('id', 'age')

您将获得带有键 idage 的字典列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    相关资源
    最近更新 更多