嗨,大家好我在django postgres json搜索中看到的行为比我不明白。 我使用django 1.11和django orm与psycopg2驱动程序。
如下:
模型字段中的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>]>
这个回应,我无法绕过它。有谁知道这是为什么?
答案 0 :(得分:1)
Django不允许在模型中使用仅数字字段名称。我认为这种限制源于某些数据库列名称限制(例如,在MySQL中,标识符可能以数字开头,但除非引用可能不仅仅由数字组成)。
Django对JSON密钥有类似字段的行为,所以我认为问题可能是由于相同。您可以尝试使用alphanumberic JSON密钥并对其进行测试。