带范围的Django多选过滤器

时间:2017-03-13 19:56:17

标签: django django-filter

我正在阅读django文档中的过滤器并遇到了多选过滤器。

 <body>
    <form id="Form1" method="post" runat="server">
        <table id="Table1">
            <tr>
                <td>
                    <iframe id="iframe1">
                    </iframe>
                    <uc1 id="uc1"></uc1>
                </td>
            </tr>
            <tr>
                <td>
                    <asp:Panel id="Panel">
                    </asp:Panel>
                    <uc1 id="uc2">
                    </uc1>
                </td>

                <td>
                    <iframe id="iframe2">
                    </iframe>
                </td>
            </tr>
        </table>
    </form>
</body>

在我的应用程序中,我有一个十进制字段代表我的产品型号中的价格。我想知道是否有一种方法可以使用多选过滤器来选择价格范围,例如,

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']

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

1 个答案:

答案 0 :(得分: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 ...