0

我有这个查询过滤器。但我不知道如何使它工作

st = Student.objects.filter(
    if request.GET['student_number']:
        Q(student_number__icontains=request.GET['student_number'])&
    if request.GET['student_region']:
        Q(student_region__icontains=request.GET['student_region']) &
    if request.GET['student_status']:
        Q(student_status__icontains=request.GET['student_status']) &
    if request.GET['student_process']:
        Q(student_process__name__icontains=request.GET['student_process']) &

有没有更好的方法来做到这一点?

4

1 回答 1

3

您可以像这样动态构建查询:

query_list = []
for field_name in ['student_process', 'student_status', 'student_number', 'student_region', ]:
    value = request.GET.get(field_name, None)
    if value:
        query_list.append(Q(**{field_name+'s_icontains': value}))
queryset = Student.objects.filter(reduce(operator.and_, query_list))

这是关于该主题的一篇很好的博客文章

于 2013-04-12T09:24:15.907 回答