[Python] Help me with PG JSON e Django

Carlos Catucci carlos.catucci a gmail.com
Mar 27 Dic 2016 22:03:59 CET


Secondo il manuale di Django, versione 1.9, si possono definire,
previa importazione dellì'apposito contrib (from
django.contrib.postgres.fields import JSONField) dei campi json in una
tabella.
Ed in effetti la creazione (Blocks.objects.create(....)) funziona benissimo.
I dolori vengono al momento di recuperare di dati immagazzinati in
questa struttura JSON.
A sentire il manuale sarebeb tutto semplice e pulito

Dog.objects.filter(data__breed='collie')

oppure per casi complessi

Dog.objects.filter(data__contains={'owner': 'Bob'})

Peccato che pur provando e riprovando i dati non vengno recuperati mai.

La struttura del model e' la seguente:

class Blocks(models.Model):
    agency = models.ForeignKey("users.Agencies")
    agency_code = models.CharField(max_length=30)
    rent_sale = models.CharField(max_length=1,choices=RENT_SALE)
    search_offer = models.CharField(max_length=1,choices=SEARCH_OFFER)
    block_type = models.CharField(max_length=100)
    location = models.CharField(max_length=200)
    customer_price = models.FloatField(default=0.0)
    agency_price = models.FloatField(default=0.0)
    details = JSONField()
    active = models.BooleanField(default=True)
    deleted = models.BooleanField(default=False)

Questo un esempio di inserimento

Blocks.objects.create(agency_id=1,agency_code='C0001',rent_sale='1',search_offer='2',block_type='appartamento',location='pescara',customer_price=100000.0,agency_price=80000.0,
active='t',deleted='f',details= {'block_details': [{"details": {"mp":
"M", "mq": "80:", "qta": "2:"}, "attribute": "camera da letto"},
{"details": {"mp": "M", "mq": "80:", "qta": "2:"}, "attribute":
"camera da letto"}, {"details": {"mp": "M", "qta": "1:"}, "attribute":
"bagno"}, {"details": {"mp": "P", "yn": "Y:"}, "attribute": "posto
auto"}, {"details": {"mp": "M", "yn": "Y:"}, "attribute":
"ascensore"}]})

Ma se eseguo una query tipo

Blocks.objects.filter(details__contains={'attribute': 'bagno'})

ottengo indietro una lista vuota ( [] )

Qualche hint su dove cercare? In rete trovo sempre e solo esempi
identici a quello del manuale.

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros


Maggiori informazioni sulla lista Python