2017-03-13 25 views
0

私はフィルタについてdjangoのドキュメントを読んで、複数の選択肢のフィルタを見つけました。Django Multiple Choice Filter Range with

class User(models.Model): 
    username = models.CharField(max_length=255) 
    first_name = SubCharField(max_length=100) 
    last_name = SubSubCharField(max_length=100) 

    status = models.IntegerField(choices=STATUS_CHOICES, default=0) 

    STATUS_CHOICES = (
     (0, 'Regular'), 
     (1, 'Manager'), 
     (2, 'Admin'), 
    ) 

class F(FilterSet): 
    status = ChoiceFilter(choices=STATUS_CHOICES) 

    class Meta: 
     model = User 
     fields = ['status'] 

私のアプリケーションでは、私の製品モデルの価格を表す小数フィールドがあります。私は価格帯を選択するために、複数の選択肢のフィルタを使用することができます方法、例えばがあった場合、私は、私は、範囲フィルタの承知していますが、私は複数の選択肢フィルタの機能を必要とすることができるよう

(0-200, '$'), 
(201-500, '$$'), 
(501-1000, '$$$') 

、思っていました複数の範囲を選択します。

答えて

0

複数の範囲でフィルタリングしようとしているため、ここで拡張する標準的な動作はありません。最適な方法は、カスタム動作を提供するために複数選択フィルタでmethod引数を使用することです。

class F(django_filters.FilterSet): 
    price = MultipleChoiceFilter(choices=(('$': '$', ...)), method='filter_price') 

    def filter_price(self, queryset, name, value): 
     # value should be a list since it's multiple choice 
     for price in value: 
      if price == '$': 
      ... 
     return ...