2017-01-14 2 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() 

以下のような 何か。だから私の改正架空FilteredCompanyManagerは、私は私はおそらく2つのモデル管理者とobjects=FilteredCompanyManagerallObjects=models.Manager()でそれを行うが、単一のモデルマネージャではなくその可能な方法をしたいことを知って

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()) 

ようになります。

答えて

0

あなたはkwargsからでdisplayAllObjectsを送ることができているマネージャーの方法を行う必要があり、次のよう

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()) 

今、あなたはそれを使用することができます。

Company.objects.get_filtered_objs(displayAllObjects=True) 

それとも

Company.objects.get_filtered_objs() 
関連する問題