2016-09-09 1 views
-1

Das ist mein models.py:Django Postgres ArrayField __contain Lookup verhält sich nicht erwartungs

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

    def __unicode__(self): 
     return self.name 

Ich tat dies in der 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') 

Allerdings, wenn ich den letzten Befehl tat es gab mir einen empy queryset zurück:

<QuerySet []> 

Die zwei obje cts (Meg und Rufus) sollten beide zurückgegeben haben, weil sie beide l

Das ist meine Abfrage enthalten:

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

Haben Sie untersuchten die generierten SQL? –

+0

@ IgnacioVazquez-Abrams, ich habe meine Frage aktualisiert –

+0

Riecht wie ein Fehler. Ich denke, die korrekte Bedingung sollte "l" in "post_tagging_dog" sein. "Data" -> "zucht", aber ich habe keine Erfahrung mit PostgreSQL JSON-Unterstützung. –

Antwort

-1

versuchen einfach for + if:

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