[Python] Help me with PG JSON e Django
Alessandro Dentella
sandro a e-den.it
Mar 27 Dic 2016 22:56:32 CET
On Tue, Dec 27, 2016 at 10:03:59PM +0100, Carlos Catucci wrote:
> 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 ( [] )
io confermo che questa sintassi per me funziona. Ho un caso analogo
dove i dati sono:
{"display_name": "Salvatore Z...", "activate_url":
"https://trepalchi.it/accounts/.../",
"current_site": "trepalchi.it",
"subject": "Salvatore Z... conferma la tua email per entrare nel
portale Trepalchi.it", }
In [1]: models.Transmission.objects.filter(substitution_data__contains={'display_name': 'Salvatore Z...'})
Out[1]: <QuerySet [<Transmission: Signup confirmation of Salvatore Z...>]>
Posso suggerirti di controllare:
* cosa hai veramente nel db
* se da prompt di pg tutto funziona (a me la parte saliente del WHERE
è:
WHERE "marketing_transmission"."substitution_data" @>
'{"display_name": "Salvatore Z..."}'
Ricordo che all'inizio avevo problemi nell'inserimento e mi finivano
dentro nel valore del campo delle graffe controbarrate. Era un
problema di interfaccia (admin), non di ORM a memoria.
sandro
*:-)
--
Sandro Dentella *:-)
http://trepalchi.it Il portale degli artisti
Maggiori informazioni sulla lista
Python