체인 필터링을위한 여러 가지 메소드가있는 사용자 정의 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)
나는 내 객체가 아닌 장고의 EmptyQuerySet의 빈의 검색어를 반환해야 할 상황이있다.
def filter_by_color(self, color):
if color.is_active:
return self.filter(some__chain__of__relationships__color=color)
return self.empty()
.empty()
은 어떻게 정의 할 수 있습니까? EmptyQuerySet에 .filter_by_date()
메서드가 없기 때문에 .filter_by_date(date)
에서 오류가 발생하므로 .none()
을 사용할 수 없습니다. 나는 많은 비 해킹 방법으로이 작업을 수행하는 것을 선호
def empty(self):
return self.filter(pk=0)
: 저는 현재 해킹 where=['1=0']
def empty(self):
return self.extra(where=['1=0'])
또는를 ... 사용하고 있습니다.
파이썬 방법은 내 사용자 정의 QuerySet 객체의 빈 쿼리 세트를 반환합니까?
나는 이것이 두려웠을 수도 있습니다. 정말, 정말로 자신 만의'EmptyQuerySet'을 만들어야하는 것을 원하지 않았습니다, 그러나 그러한 것이 삶입니다. 감사. – Rico