【问题标题】:Django: Store Q query objects for repeatable search?Django:存储 Q 查询对象以进行可重复搜索?
【发布时间】:2021-08-30 05:46:36
【问题描述】:

在我基于 Django 的网络应用程序中,用户可以执行搜索;查询由几个动态构造的复杂 Q 对象组成。

根据用户搜索参数,搜索将查询可变数量的列,也可以跨越多个模型。

用户应该能够保存她的搜索,以便稍后重复。

为此,我想将 Q 对象(我猜)存储在数据库表中。

这是好的做法吗?您将如何处理?

提前致谢。

【问题讨论】:

  • 您可以保存用户希望搜索的字符串,然后在用户希望加载保存的搜索时将该字符串应用于查询。小心 SQL 注入,如果你做得好,Django 应该会为你处理。

标签: python django


【解决方案1】:

如果您只有一个或固定数量的Q 对象作为过滤器的一部分,则可以将传递给Q 的参数保存为字典。

.例如这个:

Q(buy_book__entity__type=ENTITY.INTERNAL)

相当于这个:

q_filter = {"buy_book__entity__type": ENTITY.INTERNAL}
Q(**q_filter)

您可以将q_filter 保存在您的数据存储中。

【讨论】:

  • 这可以工作,但 Q 查询太复杂了。一个简单的 q.deconstruct() 也不会产生 json 兼容的输出。我想我需要更多代码来正确序列化+json.dumps/json.loads+反序列化Q对象...
猜你喜欢
  • 2017-09-16
  • 2015-06-23
  • 2015-01-22
  • 2010-12-27
  • 2014-02-06
  • 2015-07-15
  • 2020-09-01
  • 2014-02-26
  • 2021-09-15
相关资源
最近更新 更多