擅长:python、mysql、java
<p>关于这个有一个<code>wontfix</code><a href="https://code.djangoproject.com/ticket/30566" rel="nofollow noreferrer">Django ticket</a>。在</p>
<p>它是<a href="https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#key-index-and-path-lookups" rel="nofollow noreferrer">documented behavior</a>:</p>
<blockquote>
<p>If the key is an integer, it will be interpreted as an index lookup in an array.</p>
<p>If the key you wish to query by clashes with the name of another lookup, use the jsonfield.contains lookup instead.</p>
</blockquote>
<p>所以建议的解决方案是使用<a href="https://docs.djangoproject.com/en/2.2/ref/contrib/postgres/fields/#std:fieldlookup-hstorefield.contains" rel="nofollow noreferrer">jsonfield.contains</a>:</p>
<pre><code>Dog.objects.filter(data__contains={'99': 'FINDME'})
</code></pre>
<p>无论如何,我建议您避免在json字段中使用数字键,因为使用<code>contains</code>方法时,您无法执行<code>startswith</code>和其他类似的查找(请参见<a href="https://stackoverflow.com/questions/50569861/django-postgres-json-field-with-numeric-keys">similar question</a>),例如<code>Dog.objects.filter(data__99__startswith='FIND')</code>。在</p>