如何将当前用户传递给Django_filters{
我正在尝试根据当前用户筛选ModelChoiceFilter
,我在筛选中使用了init
方法,但失败了:
以下是我使用的代码:
视图.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'
使用正常的
_init_
,但不使用self.fields['field_name]
,而是使用self.filters[field_name]
请尝试以下代码:
您可以设置自定义方法。更多信息请点击此处:https://django-filter.readthedocs.io/en/master/guide/usage.html#customize-filtering-with-filter-method
我在Django方面没有太多经验,但我看到的是,您不能像
self.fields
那样在内部使用元属性,您必须找到另一种方法您可以找到有关如何使用筛选器here的详细信息
相关问题 更多 >
编程相关推荐