将 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 中的过滤器?

在 django 中访问传递给模板的过滤器查询结果

有啥方法可以将过滤后的查询集传递给 Django 分页?

Django Templates — 将模板中的变量值传递给 templatetags 过滤器

如何将javascript变量传递给django自定义过滤器

将kwargs传递给django管理表单