首页 > 解决方案 > 如何将自定义过滤器应用于 django 过滤器 ModelChoicefilter

问题描述

我正在使用Django Filter来过滤我的 Django 项目中的数据。

现在我需要ModelChoiceFilter根据当前登录的用户过滤一些特定的内容。

我尝试使用def _init_表单发送数据,然后使用执行过滤self.fields['field_name'].queryset = my_qs,但它给了我未解决的错误self.filters

最后,我使用了Django Filter中的Filter.Method选项,这是我的代码:

视图.py

    f = RequestsFilter(request.GET,
                       queryset=LeaveRequest.objects.filter(user=request.user),user=request.user.id)

表格.py

class RequestsFilter(django_filters.FilterSet):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super().__init__(*args, **kwargs)
    start_date = DateFilter(field_name='date_time', lookup_expr='gt', widget=forms.TextInput(attrs={'type': 'date'}))
    end_date = DateFilter(field_name='date_time', lookup_expr='lt', widget=forms.TextInput(attrs={'type': 'date'}))
    employee = django_filters.ModelChoiceFilter(field_name='employee', method="filter_employee",
                                                queryset=Employee.objects.filter())

    class Meta:
        model = LeaveRequest
        fields = ['employee', 'type', 'date_time']

    def filter_employee(self, queryset, name, value):
        qs = queryset.filter(user=self.user).filter(**{name: value})
        if len(qs) >= 1:
            return qs[0]
        else:
            return None

这不再带来错误,但该employee字段仍然显示数据库中的所有员工,而不是根据用户过滤它。

标签: pythondjangodjango-filter

解决方案


推荐阅读