获取 Django 模型对象后进行数据转换

Do data conversion after Django model object is fetched

我想将 Django 模型中的 python 字典保存为 JSON 并且我想在数据为 python 时将其转换回 python 字典已提取。

我知道我可以在视图中完成,但我想在模型中实现它,以便在查询时它可以 return 字典对象。

是否有任何信号或任何 post_fetch 方法可用于实现它,我无法通过谷歌搜索找到任何内容...

你可能想简单地使用 Python JSON 包,除非你使用 Postgres 作为你的数据库 - 在这种情况下 JSONField is the way to go. The json package is explained here 你可以在一个如果我明白你在说什么,请像这样建模:

import json

class MyModel(models.Model):
    json_field = models.TextField() # or you can use JSONField if using Postgres

    @property
    def get_json_field_as_dictionary(self):
       return json.loads(self.json_field)

   def set_json_field(self, mydict):
       self.json_field = json.dumps(mydict)

    @classmethod
    def get_json_from_dictionary(cls, mydict):
        return json.dumps(mydict)

保存到数据库时,可以使用json.dumps(myDictionary)或通过调用MyModelObject.set_json_field(myDictionary)将Python字典转换为[=]将字典转换为JSON 33=] 然后存入模型的 json_field 中。要将 JSON 数据作为字典检索,您只需调用 MyModel.objects.last().get_json_field_as_dictionary(或任何您喜欢的称呼,json_dictionary 可能是 MyModel.objects.last().json_dictionary),它会 return 那个 属性 的值就好像它是模型中的一个元素一样,而不必每次都进行转换。

或者,如果您使用 Postgres 作为后端,使用 JSONField:

会容易得多
class MyModel(models.Model):
    json_field = models.JSONField(null=True)

并保存:

    myObject = myModel.objects.create(json_field=myDictionary)      

如果你澄清我可以更新我的答案以更好地解释。

您可能想要使用 JSONField。它允许存储编码为 JSON 的数据并将它们检索为相应的 Python 数据类型,包括字典。

JSONField 仅适用于 Django < 3.1 的 PostgreSQL,但适用于 Django >= 3.1.

的任何数据库