我在Django中有一个ListView,其get_queryset()方法有时需要不返回任何结果。我尝试了三种方法:
return EmptyQuerySet()
return Model.objects.none()
return Model.objects.filter(pk=-1)
其中每一个都会返回一个稍微不同的对象。
django.db.models.query.EmptyQuerySet
,其模型属性设置为None
django.db.models.query.EmptyQuerySet
,其模型属性设置为Model
django.db.models.query.QuerySet
,其模型属性设置为Model
只有第三个选项适用于基于类的ListView。当ListView尝试访问模型属性时,其他选项会在属性错误时崩溃。这让我感到惊讶并且是一种痛苦,因为它需要我在可能导致MRO问题的地方导入Model。
我做错了什么/我应该做些什么?
更新:问题是,通过类视图方法get_queryset()
返回空查询集的正确方法是什么?
更新:以下是Django通用视图中的一行,在尝试访问model
属性时遇到属性错误:https://github.com/django/django/blob/stable/1.5.x/django/views/generic/list.py#L166。
答案 0 :(得分:10)
我认为实现此目的的最佳方法是在objects
上为您的相应型号调用none()
,然后返回结果。假设您的模型名为Entry
:
queryset = Entry.objects.none()
答案 1 :(得分:0)
我认为返回空queryset
的正确方法是不返回任何内容!像这样:
class FilesView(ModelViewSet):
serializer_class = myModelSerializer
def get_queryset(self):
if some_condition:
return some_queryset
# And leave here as it is! don't return anything. Or just write 'else: pass'