我正在为某个模型编写一个简单的搜索表单.让我们称之为Orchard模型,并为它提供苹果,橙子和梨的属性,仅仅是为了演示.
因此,表单不需要填写所有字段.所以你可以搜索苹果和橘子而不是梨.我需要像这样过滤:
Orchard.objects.filter(apples=request.GET.get('apples'), oranges=request.GET.get('oranges'), pears=request.GET.get('pears'))
但如果梨是空的,就不会有任何结果.
我的第一个想法是使用Q对象,如下所示:
from django.db.models import Q
options = {}
options['apples'] = request.GET.get('apples')
options['oranges'] = request.GET.get('oranges')
options['pears'] = request.GET.get('pears')
queries = None
for key in options:
if options[key] != u'':
if queries:
queries &= Q(key=options[key]) # <=== problem here
else:
queries = Q(key=options[key]) # <=== same problem here
results = Orchard.objects.filter(queries)
问题出现在那些标记的行中.我显然不能只使用“key”作为属性关键字,因为它不需要字符串,它基本上需要一个变量.
那么……我该如何解决这个问题呢?
除非有一个已知的解决方案,这个问题不涉及Q.这也会有所帮助.