【发布时间】:2023-03-29 22:33:02
【问题描述】:
我正在使用自定义 Django 字段来表示 JSON 编码数据:
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 - 但有更好的方法吗?
【问题讨论】:
标签: django django-admin