如何通过添加自定义选项来自定义Django过滤器?

问题描述 投票:1回答:1

models.py

class pro(models.Model):
    STATUS_CHOICES = (
        ('hi', 'hi'),
        ('bye', 'bye'),
        ('yo', 'yo'),
    )
    status = models.CharField(max_length=20, choices=STATUS_CHOICES)

views.py

import django_filters

class customfilter(django_filters.FilterSet):
    # insert some code here
    class Meta:
        model = pro
        fields = ['status',]
class proview(FilterView):
    template_name="1.html"
    filterset_class = customfilter

1.html

 <form action="" method="get">
        {{ filter.form.as_p }}
        <input type="submit" />
    </form>

如何让模板中的下拉菜单呈现这样的选择?

('hi')               
('bye')     
('yo')     
('hi or bye")
python django listview filter django-filter
1个回答
0
投票

您可以覆盖过滤器类的构造函数,并提供自定义选择来过滤这种形式的窗体。

class customfilter(django_filters.FilterSet):
    # insert some code here
    class Meta:
        model = pro
        fields = ['status', ]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.form.fields['status'].choices = (
            ('hi', 'hi'),
            ('bye', 'bye'),
            ('yo', 'yo'),
            ('hi or bye', 'hi or bye'),
        )
© www.soinside.com 2019 - 2024. All rights reserved.