2015-06-02 14 views
5

Sto tentando di impostare un campo di tipo utilizzando il factoryboy DjangoModelFactory. Ecco il codice:DjangoModelFactory JsonField restituisce dati Unicode invece dei dati del dizionario

class SubmittedAnswer(models.Model): 
    data = JSONField(default={}) 
    is_rule_check_passed = models.NullBooleanField() 

class SubmittedAnswerFactory(DjangoModelFactory): 
    class Meta: 
     model = SubmittedAnswer 

    data = {"option_ids": [1]}  

In risposta set di query di database, sto ottenendo il campo data come Unicode e non come dict.

'data': u'{"option_ids":[3]}'}] 

Mi sto perdendo qualcosa?

+0

E 'probabile essere collegato con l'implementazione '' JSONField''; Quale stai usando? – Xelnor

+0

Ciao @Xelnor, sto usando django-jsonfield - https://pypi.python.org/pypi/jsonfield – Shubham

risposta

0

La mia ipotesi (basata sul formato dell'output fornito) è che si esegue una query utilizzando values(...).

Il QuerySet restituito quando si utilizza values articoli ritorna come le istanze del dizionario (con ogni tasto corrispondente ad una colonna richiesta del modello), piuttosto che le istanze modello (vedi doc). I valori nel dizionario corrispondono a ciò che è memorizzato nel database, non vi è alcuna conversione di oggetti complessi dai dati al campo dato, in quanto non vi è alcuna istanziazione del modello.

Se si desidera ottenere direttamente istanze di modello, utilizzare un regolare QuerySet, ad es. SubmittedAnswerFactory.objects.filter(...). E se si desidera selezionare solo alcuni campi quando si esegue la query SQL effettiva per l'ottimizzazione e si ottengono ancora istanze di modello, utilizzare only (o defer) anziché values (vedere doc).

See:

for a in SubmittedAnswer.objects.only('option_ids'): 
    print a.option_ids 
>>> {'option_ids': [3]} # Dictionary object obtained by deserializing the data stored in the databse 
... 

contro

for a in SubmittedAnswer.objects.values('option_ids'): 
    print a['option_ids'] 
>>> u'{"option_ids": [3]}' # unicode string as stored in database 
... 
Problemi correlati