У меня есть некоторые комплекты фильтров, работающие нормально, но теперь я попытался добавить набор запросов к полю в FilterSet, и он не работает, когда я загружаю страницу.
Я использую Django 2.1.1 с Python 3.6и Django-filter 2.0.0.
view
def search_jobs(request):
job_list = Job.objects.filter(project__status="P", is_deleted="False")
job_filter = JobsListFilter(request.GET, queryset=job_list)
return render(request, 'webplatform/jobs_list_filter.html', {'filter': job_filter})
filter
class JobsListFilter(django_filters.FilterSet):
# LINE ADDED - the following line is the added queryset
projects = Project.objects.filter(status="P", is_deleted="False")
skills = WorkerSkills.objects.filter(
id__in=Job.objects.values_list('required_skills__id', flat=True).distinct())
worker_job = django_filters.CharFilter(method='my_filter')
required_skills = django_filters.ModelMultipleChoiceFilter(queryset=skills, widget=forms.SelectMultiple)
# LINE ADDED - The following line is the one that adds the queryset inside the field I want to filter.
project = django_filters.ChoiceFilter(queryset=projects)
compensation_type = django_filters.ChoiceFilter(choices=Job.COMPENSATION_TYPE, widget=forms.RadioSelect)
class Meta:
model = Job
fields = ['worker_job', 'required_skills', 'project', 'compensation_type']
def my_filter(self, queryset, worker_job, value):
return queryset.filter(
worker_job__icontains=value
) | queryset.filter(
work_description__icontains=value
)
Код работает без добавленных строк LINE ADDED
в FilterSet.Но дело в том, что в поле project
это просто позволяет мне выбирать между всеми созданными проектами, и я хочу, чтобы в нем были только те, которые действительно необходимы (применяя квест в коде).
Но, добавляя эти строки в коде, когда я использую режим отладки, я вижу набор запросов, примененный к полю project
, дающий ожидаемые результаты.Но затем на return
представления выдает следующую ошибку.
TypeError at /platform/search/jobs/
__init__() got an unexpected keyword argument 'queryset'
Так что я не знаю, что я сделал неправильно, потому что я использую то же самоеструктура, используемая в поле required_skills, добавляющая набор запросов только с теми объектами, которые мне нужны, и это должно работать.