queryset에 필터를 적용 할 쿼리 세트 "chain"에 배치 할 수있는 사용자 정의 함수를 만들려고합니다. 보통 Django queryset 필터와 마찬가지로, queryset을 왼쪽으로 가져 와서 결과 집합을 오른쪽으로 전달합니다. 의 검색어 체인에 내 사용자 지정 기능을 추가 한 후Django 모델 queryset 필터를 함수로 사용합니다.
models.MyModel.objects.all()
models.MyModel.objects.some_manger_function()
models.MyModel.objects.some_manger_function().count()
models.MyModel.objects.some_manger_function().filter(title='something')
:
의 검색어 체인에 내 사용자 지정 기능을 추가하기 전에
models.MyModel.objects.all().my_custom_filter()
models.MyModel.objects.some_manger_function().my_custom_filter()
models.MyModel.objects.some_manger_function().my_custom_filter().count()
models.MyModel.objects.some_manger_function().my_custom_filter()\
.filter(title='something')
내가 할 내 기능을 구성하는 방법을 잘 모르겠어요 이. 주위에 장식물이 필요합니까?
누구나 이것을 수행하는 좋은 방법을 알고 있습니까?
다음과 같이 작동 할 수도 있지만 좀 더 장고와 비슷한 것을 기대했습니다.
def my_custom_filter(qs):
return qs.filter(id__gte=1)
my_custom_filter(models.MyModel.objects.all()).count()
모든 조언을 주시면 감사하겠습니다.
감사합니다, 조
UPDATE : 나는 이그나시오의 솔루션의 세부 사항을 해결하기 위해 노력하고있어. 나는이 내가 예상 한대로 작동하고 생각하지 않는다, 그러나 ... 검색어 세트는 내가 찾을 수있어 무엇을 조립할거야 그래서 무시로 너무 많은
class MyQuerySet(QuerySet):
def filter(self, *args, **kwargs):
return super(self.__class__, self).filter(*args, **kwargs).\
filter(id__gt=5)
class MyManager(models.Manager):
def testqs(self):
return MyQuerySet(self.model)
을하지했습니다. 어떤 제안?
>>> models.MyModel.objects.testqs().filter()
업데이트 2 : 이 문서에서는 유용한 것으로 판명. http://zmsmith.com/2010/04/using-custom-django-querysets/
+1은 update2의 링크에도 도움이되었습니다. –