一尘不染

如何在Django模型上存储字典?

python

我需要在Django模型中存储一些数据。这些数据并不等于模型的所有实例。

最初,我考虑过将模型子类化,但是我试图使应用程序保持灵活。如果使用子类,则每次需要新的对象时都需要创建一个整个类,这是不好的。我还将最终得到很多子类,仅用于存储一对额外的字段。

我真的觉得词典是最好的方法,但是Django文档中没有关于在Django模型中存储词典的内容(或者我找不到它)。

有什么线索吗?


阅读 209

收藏
2020-12-20

共1个答案

一尘不染

如果您要查找的是像任意数据一样的字典,则可以使用两级设置,其中一个模型是容器,另一个模型是键-
值对。您将创建容器的实例,创建每个键值实例,并将一组键值实例与容器实例相关联。就像是:

class Dicty(models.Model):
    name      = models.CharField(max_length=50)

class KeyVal(models.Model):
    container = models.ForeignKey(Dicty, db_index=True)
    key       = models.CharField(max_length=240, db_index=True)
    value     = models.CharField(max_length=240, db_index=True)

它虽然不漂亮,但是可以让您使用数据库访问/搜索字典的内部,而不能使用pickle / serialize解决方案。

2020-12-20