首页 > 解决方案 > 获取Django模型对象后进行数据转换

问题描述

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

我知道我可以在视图中做到这一点,但我想在模型中实现它,这样它就可以在查询时返回字典对象。

是否有任何信号或任何 post_fetch 方法可以用来实现它,我找不到任何谷歌搜索...

标签: djangodjango-modelsmodel

解决方案


您可能想简单地使用 Python JSON 包,除非您使用 Postgres 作为数据库 - 在这种情况下JSONField是要走的路。这里解释了json 包,如果我理解你在说什么,你可以在这样的模型中使用它:

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)字典或将字典转换为 JSON,方法是调用MyModelObject.set_json_field(myDictionary)将 Python 字典转换为 JSON,然后将其存储在json_field模型中。要将 JSON 数据作为字典检索,您只需调用MyModel.objects.last().get_json_field_as_dictionary(或任何您喜欢调用它的名称,json_dictionary可能会这样MyModel.objects.last().json_dictionary),它将返回该属性的值,就好像它是模型中的一个元素一样,而无需执行每次转换。

或者,如果您使用 Postgres 作为后端,使用JSONField会容易得多:

class MyModel(models.Model):
    json_field = models.JSONField(null=True)

并保存:

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

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


推荐阅读