将参数转换为查询过滤器不能完全自动化,因为只有您知道哪些参数应该以哪种方式过滤哪个字段。但除非你有疯狂的
or
和
and
标准,这应该是非常简单的,因为你可以链
.filter()
不受任何限制的通话,只要你愿意
和
所有标准:
something = Something.objects.all()
if from_date and to_date:
something = something.filter(send_date__range=(from_date, to_date))
if category:
something = something.filter(values__something__category__name__iexact=category)
if color:
something = something.filter(values__something__color__name__iexact=color)
这涵盖了所有的组合,看起来很容易管理,不是吗?
如果你需要
或
(一些)你的标准,你需要
Q objects
,但你可以用同样的方式链接:
from django.db.models.query_utils import Q
qq = Q()
if category:
qq = qq | Q(values__something__category__name__iexact=category)
if color:
qq = qq | Q(values__something__color__name__iexact=color)
something = Something.objects.filter(qq)