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 _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python