5
定製JSON場我使用的是定製的Django字段表示JSON編碼的數據:使用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解碼並轉換爲字典,所以當管理站點被渲染時,並不顯示數據庫中實際的JSON字符串(例如{「foo」: 「bar」}),但是它的字典表示形式(例如{u'foo':u'bar'})。
顯然這在保存數據庫對象時會導致問題,因爲字典的字符串表示形式不是有效的JSON字符串。
我想要的是顯示實際數據庫值(即保存在數據庫中的字符串)的管理站點,而不是由to_python返回的Python對象的字符串表示形式。
我的嘗試是爲此編寫一個自定義小部件,它只是在字典上再次調用json_encode - 但有沒有更好的方法?
這有助於。非常感謝你! – ChrisM 2011-12-23 14:36:26