根据表单数据查询和使用django

时间:2013-11-13 14:32:37

标签: django django-queryset

我想创建一个查询,将从表单发布的数据作为搜索creteria,并根据这些creteria过滤模型。实施例

<form>
    <first_name input>
    <middle_name input>
    <last_name input>        
</form>

我想要的行为是与所有查询结束匹配的视图,但前提是它们具有值。也就是说,如果用户只完成第一个名称输入以仅使用名字进行搜索,如果给出了中间名,则使用两个creteria等进行搜索。我的想法是手动执行此操作,但听起来不太好。

if first_name != '' and middle_name='' and last_name='':
    return filtering only with name
elif etc....

这不具有建设性或正确性。还有另一种方法可以在django中执行此操作吗?仅当它不是空字符串时才使用creteria。

2 个答案:

答案 0 :(得分:2)

代码流可能如下所示:

kwargs = {}

if first_name != '':
    kwargs.update({'first_name': "Foo"})
if middle_name != '':
    kwargs.update({'middle_name': "Bar"})

etc...

MyModel.objects.filter(**kwargs)

答案 1 :(得分:0)

我的解决方案如下,但请告诉我它是否正确。

model.objects.filter(
                     Q(first_name__icontains=fist_name) &
                     Q(middle_name__icontains=middle_name) &
                     Q(last_name__icontains=last_name)
                    )

因为如果帖子数据是空字符串,它将匹配所有字符串,但如果其他任何字符串不是空字符串,它将按该字符串过滤那些结果。所以

e.g

first_name=''
last_name = 'Jones'
middle_name='Paul'

然后

first_name matches all
but it extracts only thouse who their middle name is Paul and last name Jones
ergo John Paul Jones

:P这种方式在数据库事务时间内花费更多吗?