如何将当前用户传递给Django过滤器ModelChoiceFilter查询集

问题描述 投票:0回答:3

如何将当前用户传递给Django_filters ModelChoiceFilter查询集。

我正在尝试根据当前用户来过滤ModelChoiceFilter,我在过滤器中使用了init方法,但失败了:

这是我使用的代码:

views.py

def requests_reports(request):
    f = RequestsFilter(request.GET, queryset=LeaveRequest.objects.filter(user=request.user), user=request.user)
    context = {
        'filter': f,
    }
    return render(request, 'requests_reports.html', context)

forms.py

class RequestsFilter(django_filters.FilterSet):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(RequestsFilter, self).__init__(*args, **kwargs)
        self.fields['employee'].queryset = Employee.objects.filter(user=self.user)

    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'}))

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

它返回此错误:

'RequestsFilter' object has no attribute 'fields'
python django django-filter
3个回答
0
投票

[我在Django中没有太多经验,但是我看到的是您不能像self.fields那样使用内部的meta属性,您必须找到另一种方式来做到这一点。

您可以找到有关如何使用过滤器here的更多信息>



0
投票

使用普通的_init_,而不是self.fields['field_name],使用self.filters[field_name]

© www.soinside.com 2019 - 2024. All rights reserved.