将 kwargs 传递给 Django 过滤器
Posted
技术标签:
【中文标题】将 kwargs 传递给 Django 过滤器【英文标题】:Pass kwargs into Django Filter 【发布时间】:2016-12-11 05:03:36 【问题描述】:从 Django Admin 中查看模型条目时,您可以指定过滤器。我怎样才能模仿这种行为?不熟悉kwargs
,但与此类似:
foo = Model.objects.filter(**__exact='**')
其中第一组**
将是模型中的一个字段,第二组将是一个条目。基本上,根据用户在前端选择的内容,使查询可变。我如何将该变量排序选项发送到视图,然后将其返回到网页。用字典怎么样?请帮忙
这个SO question 已被证明有点帮助,但仍不能完全掌握。
【问题讨论】:
【参考方案1】:您可以使用 **
将 python dict 解压缩为您的过滤器参数
your_filters =
'field_1__exact': value_1,
'field_2__gte': value_2,
Model.objects.filter(**your_filters)
也就是说,您可以根据用户输入动态构建查询过滤器(python 字典)。
【讨论】:
感谢您的回复。 2 个问题:**
是否适用于your_filters
变量,让 Django 知道这可以改变?如果是这样,那不是变量已经做了什么,它会有所不同吗?问题#2:假设我将“占位符”放在前端,我如何将用户的选择翻译回视图。可能是 AJAX 调用?
@Kervvv 关于您的问题 2:是的,您可以使用 ajax 传递它并从 request.POST 或 request.GET 数据中读取它们,具体取决于您想要什么。第一个问题我没看懂。
@levi,无论如何我可以在 kwarg 过滤器中添加“OR”语句吗?
@Christopher 在 django 和管道中使用 Q 对象。 Q(question__startswith='Who') | Q(question__startswith='What')
以上是关于将 kwargs 传递给 Django 过滤器的主要内容,如果未能解决你的问题,请参考以下文章
Django Templates — 将模板中的变量值传递给 templatetags 过滤器