一尘不染

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

django

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

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

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

有什么线索吗?


阅读 641

收藏
2020-03-29

共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-03-29