2017-03-13 82 views
0

我正在通過django文檔查看過濾器,並遇到了多選過濾器。Django多種選擇過濾器的範圍

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 ...