【问题标题】:ORM filter has no resultsORM过滤器没有结果
【发布时间】:2017-07-08 00:18:06
【问题描述】:

我有一个看法:

def PeopleView(request):
    ...
    parameters = copy.deepcopy(request.GET)
    for parameter in request.GET:
        if not request.GET.get(parameter):
            del parameters[parameter]
    people = Person.objects.filter(**parameters)
    search_form = PersonSearchForm()
    return render(request, 'persons/people.html', {
        'people': people,
        'search_form': search_form,
        ...
    })

PersonSearchForm:

class PersonSearchForm(forms.Form):
    first_name = forms.CharField(required=False)
    last_name = forms.CharField(required=False)
    second_name = forms.CharField(required=False)
    country = forms.CharField(required=False)
    city = forms.CharField(required=False)
    gender = forms.CharField(widget=forms.Select, required=False)
    birthday = forms.DateField(required=False)
    school = forms.CharField(required=False)
    university = forms.CharField(required=False)
    profession = forms.CharField(required=False)

Person 模型具有来自 PersonSearchForm 的同名字段。此表单由用户作为 GET 请求发送。

GET 请求并打印参数变量:

但是过滤器总是没有结果。怎么了?

【问题讨论】:

  • 不知道。参数是什么?模型是什么样的?您有与请求值相关的数据吗?
  • @DanielRoseman 我添加了有关 PersonSearchForm 的信息。 Person 模型具有相同类型和名称的字段。
  • 能否在视图中打印parameters 并显示结果?
  • @DanielRoseman 已添加。在这个例子中,我只输入了 first_name 和 last_name 字段。
  • @DanielRoseman 如果您仍然对这个问题感兴趣,我会通知您我在问题中编写了解决方案。

标签: django forms view filter orm


【解决方案1】:

解决方案

我解决了这个问题。解决方案是将 querydict 参数转换为 dict 对象。它看起来像:

...
filter_parameters = {}
for parameter in parameters:
    filter_parameters[parameter] = parameters[parameter]
people = Person.objects.filter(**filter_parameters)
...

而且它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2020-02-29
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多