Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Postgres ArrayField\uuu包含查找的行为不符合预期_Python_Django - Fatal编程技术网

Python Django Postgres ArrayField\uuu包含查找的行为不符合预期

Python Django Postgres ArrayField\uuu包含查找的行为不符合预期,python,django,Python,Django,这是my models.py: 我在django shell中这样做: Dog.objects.create(name='Rufus', data={ 'breed': 'labrador', 'owner': { 'name': 'Bob', 'other_pets': [{ 'name': 'Fishy', }], }, }) Dog.objects.create(name='Meg', data={'breed': 'collie'}) Dog.objects.filter(data_

这是my models.py:

我在django shell中这样做:

Dog.objects.create(name='Rufus', data={ 'breed': 'labrador', 'owner': { 'name': 'Bob', 'other_pets': [{  'name': 'Fishy',  }], }, })
Dog.objects.create(name='Meg', data={'breed': 'collie'})
Dog.objects.filter(data__breed__contains='l')
但是,当我执行最后一个命令时,它给了我一个empy queryset返回:

<QuerySet []>

只需尝试+if:

for obj in Dog.objects:
    if 'l' in obj.data['breed']:
        return obj

你检查过生成的SQL吗?@IgnacioVazquez Abrams,我更新了我的问题闻起来像个bug。我认为正确的条件应该是“post_tagging_dog.”“data”->“breed”中的“l”,但我对PostgreSQL的JSON支持没有经验。检查左侧JSON是否包含右侧JSON的路径/值项。因此,JSONField的
contains
不是这里使用的正确方法。您需要以文本形式获取
breed
值,并检查这些值是否包含字母
l
。不确定如何使用Django的ORM来实现这一点。@Sevanteri,那么对于这个问题,正确的查询是什么呢?
SELECT "post_tagging_dog"."id", "post_tagging_dog"."name", "post_tagging_dog"."data" FROM "post_tagging_dog" WHERE "post_tagging_dog"."data" -> 'breed' @> '"l"'
for obj in Dog.objects:
    if 'l' in obj.data['breed']:
        return obj