Django Postgres ArrayField __contain lookup没有预期的行为

时间:2016-09-09 07:10:03

标签: python django

这是我的 models.py

class Dog(models.Model):
    name = models.CharField(max_length=200)
    data = JSONField()

    def __unicode__(self):
        return self.name

我是在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 return:

<QuerySet []>

两个对象(Meg和Rufus)应该都返回,因为它们都包含l

这是我的疑问:

SELECT "post_tagging_dog"."id", "post_tagging_dog"."name", "post_tagging_dog"."data" FROM "post_tagging_dog" WHERE "post_tagging_dog"."data" -> 'breed' @> '"l"'

1 个答案:

答案 0 :(得分:-1)

只需for + if

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