Я использую Django Filter для фильтрации данных в моем Django проекте.
Теперь мне нужно отфильтровать некоторые параметры c ModelChoiceFilter
на основе текущего зарегистрированного пользователя.
Я пытался отправить данные с помощью def _init_
в форму, а затем выполнить фильтрацию с помощью self.fields['field_name'].queryset = my_qs
, но это дает мне неразрешенную ошибку для self.filters
.
Наконец, я использовал опции Filter.Method из Django Filter , вот мой код:
просмотров .py
f = RequestsFilter(request.GET,
queryset=LeaveRequest.objects.filter(user=request.user),user=request.user.id)
forms.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
по-прежнему показывает все сотрудники в базе данных, не фильтруя ее на основе пользователя.