有什么办法可以避免对单个值的查询集进行迭代?

时间:2019-12-26 15:39:32

标签: django django-models django-views

每次我想要模型中的一些数据时,我都会得到一个queryset对象。 所以当我说

"items = Items.object.get(value=value)"

我得到-

"<QuerySet [<Item-name>]>"

我必须遍历queryset对象以获取数据,而我使用

"items[0]"

有什么办法可以避免这种情况吗?

编辑:我是说"items = Items.object.filter(value=value)"

3 个答案:

答案 0 :(得分:1)

您误会了。 items = Items.object.get(value=value)不会给您一个查询集,而是一个对象。 items = Items.object.filter(value=value) 会给你一个查询集。

Filter方法将始终为您提供一个查询集,因为;为了最大程度地减少数据库命中的需求,django认为您可以在代码中添加其他过滤器。因此,如果您不执行该查询集,例如通过使用list(your_queryset) django永远不会访问数据库。

答案 1 :(得分:0)

# when you are using 'get' in your query, you don't need to iterate, directly get an access to the field values

try:
    items = Items.object.get(value=value)
except Items.DoesNotExist:
    items = None

if items:
    print(items.value)

答案 2 :(得分:-1)

首先items = Items.object.get(value=value)不返回查询集, 而是返回<QuerySet [<Item-name>]>

的对象

要从对象获取第一个(或仅一个结果)或最后一个日期,请执行此items.firstitems.last()

要获取所需数据而不使用其索引位置,则可以对其进行过滤以返回类似items.filter(value=value)的查询集