首页 > 解决方案 > Django 选择过滤器:如何阻止在 request.GET 中提交空选择标签

问题描述

当订购下拉菜单设置为“无”或“----”时,如何从 URL 中删除“订购=”,这是默认选项。

'&ordering=' 出现在 url

演示链接

过滤器.py


class BrandFilter(django_filters.FilterSet):

    brand = django_filters.ModelMultipleChoiceFilter(widget=forms.CheckboxSelectMultiple)
    category = django_filters.ModelMultipleChoiceFilter(widget=forms.CheckboxSelectMultiple)
    
    ordering = django_filters.OrderingFilter(

        choices = (
            ('-is_featured', 'Featured'),
            ('-created_at', 'Date, New to Old'),
            ('created_at', 'Date, Old to New' ),
        ),
        fields = (
            ('is_featured', 'featured'), #{model field name, parameter in the URL}
            ('created_at', 'created'),
            ('price', 'price'),
        ),
        field_labels = {
            'is_featured': 'Featured', #{model field name, human readable label}
            'created_at': 'Date',
            'price': 'Price',
        }
    )

    class Meta:
        model = Product 
        fields = ('brand','category') 
    
    def __init__(self, products= "", category=Category.objects.none(),*args, **kwargs):
        super(BrandFilter, self).__init__(*args, **kwargs)
        self.filters['brand'].queryset = Brand.objects.filter(product__in=products).distinct()  
        self.filters['category'].queryset = category

标签: pythondjangodjango-filterdjango-filters

解决方案


推荐阅读