【发布时间】:2014-08-28 07:35:58
【问题描述】:
我有一个自定义的 QuerySet 对象,它有多种链接过滤的方法。首先,设置上下文。
from django.db.models import Manager, Model
from django.db.models.query import QuerySet
class MyQuerySet(QuerySet):
def some_filter(self, foo):
return self.filter(some__chain__of__relationships__foo=foo)
class MyModelManager(Manager):
def get_query_set(self):
return MyQuerySet(self.model, using=self._db)
class MyModel(Model):
objects = MyModelManager()
用例:
qs = MyModel.objects.get_query_set()
qs = qs.filter_by_name(name).filter_by_color(color).filter_by_date(date)
我有一种情况需要返回我的对象的空查询集,而不是 Django 的 EmptyQuerySet。
def filter_by_color(self, color):
if color.is_active:
return self.filter(some__chain__of__relationships__color=color)
return self.empty()
如何定义.empty()?我不能使用.none(),因为.filter_by_date(date) 会抛出错误,因为EmptyQuerySet 没有.filter_by_date() 方法。我目前正在使用黑客where=['1=0']
def empty(self):
return self.extra(where=['1=0'])
或者...:
def empty(self):
return self.filter(pk=0)
我更愿意以非黑客的方式来做这件事。
什么是 Pythonic 方式返回我的自定义 QuerySet 对象的空查询集?
【问题讨论】: