在 Django 视图中返回空查询集的正确方法是什么?

问题描述 投票:0回答:1

我在 Django 中有一个 ListView,其 get_queryset() 方法有时不需要返回任何结果。我尝试了三种方法来做到这一点:

  1. return EmptyQuerySet()
  2. return Model.objects.none()
  3. return Model.objects.filter(pk=-1)

其中每一个都会返回一个略有不同的对象。

  1. django.db.models.query.EmptyQuerySet
    ,其模型属性设置为
    None
  2. django.db.models.query.EmptyQuerySet
    ,其模型属性设置为
    Model
  3. django.db.models.query.QuerySet
    ,其模型属性设置为
    Model

只有第三个选项适用于基于类的 ListView。当 ListView 尝试访问模型属性时,其他选项会因属性错误而崩溃。这让我感到惊讶并且很痛苦,因为它要求我在可能导致 MRO 问题的地方导入模型。

我做错了什么/我应该采取什么不同的做法?

更新:那么问题是,通过类视图方法返回空查询集的正确方法是什么

get_queryset()

更新:这是 Django 通用视图中的一行,在尝试访问

model
属性时遇到属性错误:https://github.com/django/django/blob/stable/1.5.x/django/视图/通用/list.py#L166.

django django-views django-queryset
1个回答
78
投票

我认为实现此目的的最佳方法是为您各自的模型在 none()

 上调用 
objects
,并返回结果。假设您的模型名为 
Entry
:

queryset = Entry.objects.none()
© www.soinside.com 2019 - 2024. All rights reserved.