2015-06-02 5 views
5

मैं फैक्ट्रीबॉय DjangoModelFactory का उपयोग कर JSONField प्रकार का एक फ़ील्ड सेट करने का प्रयास कर रहा हूं।DjangoModelFactory JsonField शब्दकोश डेटा के बजाय यूनिकोड डेटा लौटा रहा है

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

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

    data = {"option_ids": [1]}  

डेटाबेस क्वेरीसमूह जवाब में, मैं Unicode रूप data क्षेत्र हो रही है और dict के रूप में नहीं कर रहा हूँ: यहाँ कोड है।

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

क्या मुझे कुछ याद आ रहा है?

+0

यह अपने '' JSONField'' कार्यान्वयन से संबंधित होने की संभावना है बनाम; कौन सा एक आप प्रयोग कर रहें है? – Xelnor

+0

हाय @ एक्सलनर, मैं django-jsonfield का उपयोग कर रहा हूं - https://pypi.python.org/pypi/jsonfield – Shubham

उत्तर

0

मेरा अनुमान (आपके द्वारा दिए गए आउटपुट के प्रारूप के आधार पर) यह है कि आप values(...) का उपयोग करके एक क्वेरी निष्पादित करते हैं।

QuerySet लौटे जब शब्दकोश उदाहरणों के रूप में values रिटर्न आइटम (प्रत्येक कुंजी मॉडल की एक अनुरोध किया स्तंभ के लिए इसी के साथ) का इस्तेमाल करके उनकी मॉडल उदाहरणों (doc देखें) की तुलना में। शब्दकोश में मान जो डेटाबेस में संग्रहीत हैं, उसके अनुरूप है, डेटा से दिए गए क्षेत्र में कोई जटिल ऑब्जेक्ट रूपांतरण नहीं है, क्योंकि मॉडल का कोई तात्कालिकता नहीं है।

यदि आप सीधे मॉडल उदाहरण प्राप्त करना चाहते हैं, तो नियमित QuerySet का उपयोग करें, उदाहरण के लिए। SubmittedAnswerFactory.objects.filter(...)। और यदि आप ऑप्टिमाइज़ेशन के लिए वास्तविक SQL क्वेरी निष्पादित करते समय केवल कुछ फ़ील्ड चुनना चाहते हैं, और अभी भी मॉडल उदाहरण प्राप्त करें, (या defer) का उपयोग values के बजाय करें (doc देखें)।

देखें:

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

for a in SubmittedAnswer.objects.values('option_ids'): 
    print a['option_ids'] 
>>> u'{"option_ids": [3]}' # unicode string as stored in database 
... 
संबंधित मुद्दे