【问题标题】:Django - Problem adding a queryset to a field on a FilterSetDjango - 将查询集添加到 FilterSet 上的字段时出现问题
【发布时间】:2019-02-15 13:16:20
【问题描述】:

我有一些过滤器集工作正常,但现在我尝试将查询集添加到过滤器集上的字段,但在加载页面时失败。

我将 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
        )

代码在没有在 FilterSet 上添加行 LINE ADDED 的情况下工作。但问题是,在project 字段上,它只是让我在创建的所有项目之间进行选择,我只想拥有真正需要的项目(在代码上应用 queriset)。

但是在代码中添加这些行,当我使用调试模式时,我可以看到应用于字段 project 的查询集给出了预期的结果。但是随后,在视图的return 上抛出了以下错误。

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

所以我不知道我做错了什么,因为我使用在 required_skills 字段上使用的相同结构添加了一个查询集,其中只有我想要的对象并且它应该可以工作。

【问题讨论】:

标签: python django django-filter


【解决方案1】:

正如@Moisés Hiraldo 在 cmets 上所说,问题是我必须在 django_filters.ChoiceFilter 前面使用 django_filters.ModelChoiceFilter

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 2019-12-12
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2018-05-25
    • 2012-05-19
    相关资源
    最近更新 更多