में कस्टम JSON क्षेत्र के लिए मैं एक कस्टम Django क्षेत्र का उपयोग कर रहा:उपयोग forms.TextArea Django व्यवस्थापक साइट
class JSONField(models.TextField):
__metaclass__ = models.SubfieldBase
def to_python(self, value):
if value == "":
return None
try:
if isinstance(value, basestring):
return json_decode(value)
except ValueError:
pass
return value
def get_prep_value(self, value):
if value == "":
return None
if isinstance(value, dict) or isinstance(value, dict):
value = json_encode(value)
return super(JSONField, self).get_prep_value(value)
def value_to_string(self, obj):
value = self._get_val_from_obj(obj)
return self.get_db_prep_value(value,connection=None)
क्षेत्र में ही ठीक काम करता है। हालांकि व्यवस्थापक साइट के माध्यम से संपादन संभव नहीं है क्योंकि डेटाबेस से स्ट्रिंग JSON-decoded है और एक शब्दकोश में कनवर्ट किया गया है, इसलिए जब व्यवस्थापक साइट प्रदान की जाती है, तो डेटाबेस से वास्तविक JSON स्ट्रिंग प्रदर्शित नहीं होती है (उदाहरण के लिए {"foo": "बार"}), लेकिन इसका शब्दकोश प्रतिनिधित्व (उदाहरण के लिए {u'foo ': u'bar'})। जब डेटाबेस वस्तु बचत, क्योंकि शब्दकोश की स्ट्रिंग प्रतिनिधित्व एक मान्य JSON स्ट्रिंग नहीं है
जाहिर है इस समस्याओं को जन्म देता।
मेरे पास करने के लिए क्या करना चाहते हैं व्यवस्थापक अजगर वस्तु to_python द्वारा वापस की स्ट्रिंग प्रतिनिधित्व वास्तविक डेटाबेस मूल्य (अर्थात स्ट्रिंग के रूप में यह डेटाबेस में सहेजा जाता है) दिखा साइट के बजाय है।
मेरे प्रयास यह है कि सिर्फ json_encode फिर कॉल शब्दकोश पर के लिए कस्टम विजेट लिखने के लिए हो सकता है - लेकिन वहाँ एक बेहतर तरीका है?
इससे मदद मिली। आपका बहुत बहुत धन्यवाद! – ChrisM