gpt4 book ai didi

django - 将 forms.TextArea 用于 Django 管理站点中的自定义 JSON 字段

转载 作者:行者123 更新时间:2023-12-04 15:14:44 25 4
gpt4 key购买 nike

我正在使用自定义 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 - 但有更好的方法吗?

最佳答案

value_from_object将有助于解决问题。它的实现取决于使用了什么序列化器,但对于 simplejson 应该如下所示:

from django.utils import simplejson as json
from django.core.serializers.json import DjangoJSONEncoder

class JSONField(models.TextField):
....

def value_from_object(self, obj):
return json.dumps(super(JSONField, self).value_from_object(obj))

关于django - 将 forms.TextArea 用于 Django 管理站点中的自定义 JSON 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com