Django — проблема с добавлением набора запросов в поле в FilterSet

У меня есть несколько наборов фильтров, которые работают нормально, но теперь я попытался добавить набор запросов в поле в наборе фильтров, и при загрузке страницы произошел сбой.

Я использую Django 2.1.1 с Python 3.6 и Django-filter 2.0.0.

Посмотреть

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

фильтр

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 он просто позволяет мне выбирать между всеми созданными проектами, и я хочу иметь только те, которые действительно необходимы (применив queriset к коду).

Но добавляя эти строки в код, когда я использую режим отладки, я вижу, что набор запросов применяется к полю project, что дает ожидаемые результаты. Но затем на return представления возникает следующая ошибка.

TypeError at /platform/search/jobs/ __init__() got an unexpected keyword argument 'queryset'

Поэтому я не знаю, что я сделал неправильно, потому что я использую ту же структуру, что и в поле required_skills, добавляя набор запросов только с теми объектами, которые мне нужны, и это должно работать.


person Pol Frances    schedule 15.02.2019    source источник
comment
Я думаю, вы только что выбрали неправильный класс для поля фильтра проекта, вы, вероятно, хотели использовать django_filters.ModelChoiceFilter, который принимает набор запросов в качестве аргумента django-filter.readthedocs.io/en/master/ref/   -  person Moisés Hiraldo    schedule 15.02.2019
comment
вы совершенно правы, спасибо!   -  person Pol Frances    schedule 15.02.2019


Ответы (1)


Как сказал @Moisés Hiraldo в комментариях, проблема в том, что мне пришлось использовать django_filters.ModelChoiceFilter перед django_filters.ChoiceFilter.

person Pol Frances    schedule 15.02.2019