2016-09-09 33 views
-1

這是我models.pyDjango的Postgres的ArrayField __contain查找沒有表現果然

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

    def __unicode__(self): 
     return self.name 

我的Django的外殼做:

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 []> 

The two obje CTS (MEG和魯弗斯)應該有兩回,因爲它們都含有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"' 
+0

您已檢查生成的SQL? –

+0

@ IgnacioVazquez-Abrams,我更新了我的問題 –

+0

聞起來像一個錯誤。我*認爲*正確的條件應該是'''在post_tagging_dog「。」data「 - >'breed'中,但是我對PostgreSQL的JSON支持沒有經驗。 –

回答

-1

嘗試簡單for + if

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