例如,查询是:
Angular 2
如果其中一个 a b c 是“任意”,该怎么办?
我的意思是如果我从前端收到a =“Any”,我应该如何在过滤器中有效地释放这个限制?
答案 0 :(得分:2)
您可以创建一个函数来从参数构建Q
object:
def _get_filter(name, value):
return Q() if value == 'Any' else Q((name, value))
并将它们与&
合并:
q = (
_get_filter('country', request.GET['country']) &
_get_filter('name', request.GET['name']) &
_get_filter('title', request.GET['title'])
)
result = models.Data.objects.filter(q)
如果可能的话,我还会得到请求的来源(前端?)来发送一个更好的值来表示“Any”,就像一个空字符串。
答案 1 :(得分:0)
您不必在单个查询中执行所有操作。一切都完成后才会运行查询。
您可以使用:
result = models.Data.objects.all()
if a != 'any':
result = result.filter('country' = a)
if b != 'any':
result = result.filter('name' = b)
if c != 'any':
result = result.filter('title' = c)
...
查询不会对数据库运行,直到所有内容都完成,所以这实际上并没有添加任何额外的查询。