如何使用Django过滤器添加初始/默认值?

2024-10-01 09:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Django Filters时,如何添加初始/默认值?在

例如,initial=False

class UserFilter(django_filters.FilterSet):
    archive = django_filters.BooleanFilter(initial=False)

    class Meta:
         model = User
         fields = ['archive']

我已经厌倦了重写__init__,但这似乎不起作用。在


Tags: djangofalsefieldsmodelfiltersmetaclassinitial
3条回答

对于DRF,您可以尝试重写__init__

def __init__(self, *args, **kwargs):
    kwargs['data']._mutable = True
    if 'archive' not in kwargs['data']:
        kwargs['data']['archive'] = False
    kwargs['data']._mutable = False
    super(UserFilter, self).__init__(*args, **kwargs)

但你应该读django-filter.readthedocs.io...using-initial-values-as-defaults

您可以尝试重写UserFilter__init__方法:

def __init__(self, *args, **kwargs):
    super(UserFilter, self).__init__(*args, **kwargs)
    self.form.initial['archive'] = False

我有一个类似的问题,我想保存用户的选择,即使他们已经离开页面。我在Filter视图中实现了我的解决方案,如下所示。。。在

class BucketLookupView(UserPassesTestMixin,SingleTableMixin,FilterView):
    template_name = "finance/planning-bucket-lookup.html"
    model = finance_models.SalesOrderBucket
    filterset_class = finance_filters.BucketFilter
    table_class = finance_tables.BucketTable

    def get_filterset_kwargs(self,*args):
        kwargs = super().get_filterset_kwargs(*args)
        if kwargs['data']:
            bucket_filter_data = kwargs['data']
            self.request.session['bucket_filter_data']= bucket_filter_data
        else:
            if 'bucket_filter_data' in self.request.session.keys():
                kwargs['data']=self.request.session['bucket_filter_data']
        return kwargs  

相关问题 更多 >