首先,我知道我的问题重复了this个问题。但我说它不一样。
我需要保存用户"搜索过滤器"。据我所知,Django ORM为不同的DB创建特定的SQL查询。因此,如果我保存SQL查询,我就无法使用不同的SQL语法在其他数据库上迁移。 我错了吗? 如果没有,我怎样才能保存Django的查询方面而不需要DB?
答案 0 :(得分:1)
简短的回答是,你是正确的 - 大多数情况下。如果Django编译查询的SQL方言与不同的后端不兼容,那么它将无法工作或可能无法预测。
要保存查询的Django端,为什么不保存您正在使用的实际filter()
语句或者您可以动态转换回来的语句?
编辑:好的,在这种情况下,我认为您根据评论和上述答案进入了正确的轨道。如果您正在解析查询字符串已经将其作为CharField
保存在数据库中,那么在检索时只需使用它来构建Django QuerySet。如果我理解。
答案 1 :(得分:0)
所以... Pickle函数request.META["QUERY_STRING"]
不是最好的主意,以便为特定的DB保存SQL字符串。我认为这个问题的最佳解决方案是保存搜索参数。在我的情况下,它是GET字符串。我明白了:
from django.http import QueryDict
QueryDict(request.META["QUERY_STRING"])
保存到DB。
如果我需要它,我只需解析:
SearchTrustedForm()
另外,我使用不同的形式来验证此值(可选) Date Quote-Spread
0 2013-11-17 2.0
1 2013-12-10 8.0
2 2013-12-11 8.0
3 2014-06-01 5.0
4 2014-06-23 15.0
5 2014-06-24 45.0
6 2014-06-25 10.0
7 2014-06-28 20.0
8 2014-09-13 50000.0
9 2015-03-30 250000.0
10 2016-04-02 103780.0
11 2016-04-03 119991.0
12 2016-04-04 29994.0
13 2016-04-05 69993.0
14 2016-04-06 39997.0
15 2016-04-09 490321.0
16 2016-04-10 65485.0
17 2016-04-11 141470.0
18 2016-04-12 109939.0
19 2016-04-13 29983.0
20 2016-04-16 39964.0
21 2016-04-17 39964.0
22 2016-04-18 79920.0
23 2016-04-19 29997.0
24 2016-04-20 108414.0
25 2016-04-23 126849.0
26 2016-04-24 206853.0
27 2016-04-25 37559.0
28 2016-04-26 22817.0
29 2016-04-27 37506.0
30 2016-04-30 37597.0
31 2016-05-01 18799.0
32 2016-05-02 18799.0
33 2016-05-03 9400.0
34 2016-05-07 29890.0
35 2016-05-08 29193.0
36 2016-05-09 7792.0
37 2016-05-10 3199.0
38 2016-05-11 8538.0
39 2016-05-14 49937.0
,因为如果数据结构已更改,我可以保存向后兼容性。