2015-06-02 12 views
5

DjangoModelFactory numaralı fabrika modelini kullanarak JSONField türünde bir alan ayarlamaya çalışıyorum. Veritabanı QuerySet yanıt olarakDjangoModelFactory JsonField sözlük verisi yerine Unicode verilerini döndürüyor

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

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

    data = {"option_ids": [1]}  

, ben dict olarak Unicode olarak data alanını alma ve değilim: İşte kodudur.

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

Bir şeyleri kaçırıyor muyum?

+0

karşı; Hangisini kullanıyorsun? – Xelnor

+0

Merhaba @Xelnor, django-jsonfield kullanıyorum - https://pypi.python.org/pypi/jsonfield – Shubham

cevap

0

Benim tahminim (verdiğiniz çıktıya bağlı olarak), values(...) kullanarak bir sorgu gerçekleştirmenizdir. values kullanıldığında, QuerySet döndürülen , örnek örnekleri yerine (Örnekler için istenen bir sütuna karşılık gelen)) anahtar örnekleri döndürür (bkz. doc). Sözlükdeki değerler, veritabanında saklanana karşılık gelir, modelin bir örneği olmadığından, verilerden verilen alana karmaşık bir nesne dönüşümü yoktur.

Model örneklerini doğrudan almak isterseniz, düzenli bir QuerySet kullanın. SubmittedAnswerFactory.objects.filter(...). Ve en iyi duruma getirme için gerçek SQL sorgusunu gerçekleştirirken sadece bazı alanları seçmek istiyorsanız ve yine de model örneklerini almak istiyorsanız, values yerine only (veya defer) kullanın (bkz. doc).

Bkz:

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 
... 

Bu sizin `` JSONField`` uygulanmasıyla ilgili muhtemel olduğunu
for a in SubmittedAnswer.objects.values('option_ids'): 
    print a['option_ids'] 
>>> u'{"option_ids": [3]}' # unicode string as stored in database 
... 
İlgili konular