大家好,我在 django postgres json 搜索中看到了一种我不理解的行为。 我正在使用 django 1.11 和带有 psycopg2 驱动程序的 django orm。
过程如下:
模型字段中的 json 如下所示。
{"2018": [1, 2, 3]}
如果我使用这个查询:
models.mymodel.objects.filter(jsonfield__2018__contains=1)
Out[97]: <QuerySet []>
如您所见,我得到了一个空查询。
然后我只是为了测试目的而尝试这样做。 新的 Json:
[ {"2018": [1, 2, 3]}]
新查询:
models.mymodel.objects.filter(jsonfield__0__2018__contains=1)
Out[98]: <QuerySet []>
还是没有反应。
然后我终于尝试了这个。 新的 Json:
[ {"2018_1": [1, 2, 3]}]
新查询:
models.mymodel.objects.filter(jsonfield__0__2018_1__contains=1)
Out[100]: <QuerySet [<MyModel: MyModel object>]>
这个人回应了,我无法理解它。有谁知道这是为什么?
最佳答案
Django 不允许在模型中使用纯数字字段名称。我认为此限制来自某些数据库列名限制(例如,在 MySQL 中,标识符可能以数字开头,但除非引用可能不完全由数字组成)。
而且 Django 对 JSON 键有类似字段的行为,所以我认为这个问题可能是由于同样的原因造成的。您可以尝试使用字母数字 JSON key 并进行测试。
关于python - Json 字段搜索与 django 意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48593821/