Json Fields使用django意外行为进行搜索

时间:2018-02-03 04:05:56

标签: python sql django postgresql orm

嗨,大家好我在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>]>

这个回应,我无法绕过它。有谁知道这是为什么?

1 个答案:

答案 0 :(得分:1)

Django不允许在模型中使用仅数字字段名称。我认为这种限制源于某些数据库列名称限制(例如,在MySQL中,标识符可能以数字开头,但除非引用可能不仅仅由数字组成)。

Django对JSON密钥有类似字段的行为,所以我认为问题可能是由于相同。您可以尝试使用alphanumberic JSON密钥并对其进行测试。