【问题标题】:Django Multiple Choice Filter With Ranges带有范围的 Django 多项选择过滤器
【发布时间】:2017-03-13 19:56:17
【问题描述】:

我正在阅读过滤器的 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, '$$$')

我知道范围过滤器,但我需要多项选择过滤器的功能并且能够选择多个范围。

【问题讨论】:

    标签: django django-filter


    【解决方案1】:

    这里没有任何标准行为可以扩展,因为您尝试按多个范围进行过滤。最好的办法是在多项选择过滤器上使用 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 ...
    

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 2013-06-26
      • 2017-05-26
      相关资源
      最近更新 更多