2017-01-14 1 views
0

status의 일부를 숨기는 Company 모델이 있습니다. 따라서 사용자가 Company.objects.all()을 쿼리 할 때 부적절한 것으로 판단되는 특정 status을 필터링합니다.모델 매니저에서 Django Queryset의 kwargs를 받으세요

class FilteredCompanyManager(models.Manager): 
    def get_queryset(self): 
     return super(FilteredCompanyManager, self).get_queryset().exclude(status__in=CompanyConstants.SPECIAL_STATUS.values()) 

내 문제는 내가 어떤 상태를 배제하지 Company.objects.filter(displayAllObjects=True) 뭔가를 원하는 것입니다 아래

class Company(models.Model): 
    name=models.TextField() 
    status=models.CharField() 
    ... 
    objects = FilteredCompanyManager() 

같은 뭔가. 그래서

class FilteredCompanyManager(models.Manager): 
    def get_queryset(self): 
     if 'displayAllObjects' in super(FilteredCompanyManager, self).get_queryset().get_kwargs(): 
      return super(FilteredCompanyManager, self).get_queryset() 
     else: 
      return super(FilteredCompanyManager, self).get_queryset().exclude(status__in=CompanyConstants.SPECIAL_STATUS.values()) 

처럼 내 개정 가상 FilteredCompanyManager 보일 것이다 뭔가 내가 objects=FilteredCompanyManagerallObjects=models.Manager() 함께 할하지만 단일 모델 관리자에서 가능하지 두 모델 매니저와 방법을 원하는 아마 수있어.

당신은 kwargs로의 displayAllObjects을 보낼 수있는 관리 방법을 확인해야합니다

답변

0

:

Company.objects.get_filtered_objs(displayAllObjects=True) 

또는

Company.objects.get_filtered_objs() 
을 다음과 같이

지금
class FilteredCompanyManager(models.Manager): 

    def get_filtered_objs(self, *args, **kwargs): 
     if kwargs.pop('displayAllObjects', False): 
      return self.get_queryset().all() 
     else: 
      return self.get_queryset().exclude(status__in=CompanyConstants.SPECIAL_STATUS.values()) 

당신이 그것을 사용할 수 있습니다