django-filters 中 ChoiceField 的初始值不起作用

3 投票
2 回答
2703 浏览
提问于 2025-04-18 06:58

我有一个django-filter(https://github.com/alex/django-filter/)的过滤器:

class ApplicationFilter(django_filters.FilterSet):
    status = django_filters.ChoiceFilter(choices=STATUS2,)

这个过滤器的状态包含以下元组列表:

STATUS_CHOICES = (
    ( '', u'All'),
    ( 'NEW', u'New'),
    ( 'SUBMIT', u'Submit'),
    ( 'CANCEL', u'Cancel'),
)

现在,我想为这个过滤器设置一个初始值,而不是默认的空值(全部)。所以我尝试了以下几种方法,但都没有成功:

i. 在字段中添加一个初始参数: status = django_filters.ChoiceFilter(choices=STATUS2, initial = 'NEW' ) 或者用数组 status = django_filters.ChoiceFilter(choices=STATUS2, initial = ['NEW'] )。但是表单显示的还是默认的初始值。

ii. 修改表单的 __init__ 方法:

    def __init__(self, *args, **kwargs):
        super(ApplicationFilter, self).__init__(*args, **kwargs)
        self.form.initial['status']='NEW'
        self.form.fields['status'].initial='NEW'
-- 结果表单还是显示默认的初始值(全部)... 我也尝试过把值设置为 ['NEW'],但还是没成功。

有没有人知道该怎么处理这个问题?我使用的是最新的(从github上下载的)django-filter版本。

谢谢大家!

2 个回答

0

这个回答可能对你有帮助:

如何在django-filters中设置初始值?

在我的视图中,我这样做:

get_query = request.GET.copy()
if 'status' not in get_query:
    get_query['status'] = 'final'
filter_set = MatterFilterSet(get_query)
0

试试这个:

def __init__(self, *args, **kwargs):
    super(ApplicationFilter, self).init(*args, **kwargs)
    self.initial['status'] = 'NEW'

撰写回答