django中模型的按需列创建

时间:2018-04-05 19:23:18

标签: django django-models django-admin django-postgresql

所以,我的models.py有这个模型

class student(models.Model): ID = models.CharField(default='DUMMY_ID',primary_key=True,max_length=10) Score = models.CharField(default='DUMMY_Score',max_length=150) class = models.CharField(default='DUMMY_class',max_length=20)

现在的要求是用户(认为他是管理员/研究所所长)应该能够在数据库中添加新列,如sectionrank等。

所以有没有办法动态地向表中添加一个新列,如果是,你可以用一个例子来解释它,因为我是Django的初学者。

DOUBT:如果有某种方法可以做到这一点,那么上面的models.py是否会有另一个条目(例如:rank= models.CharField(default='rank',max_length=20)更改后? 以及为新列中的先前条目填充了哪些数据?

1 个答案:

答案 0 :(得分:0)

  

有没有办法动态地向表中添加新列

没有。

你不能随时随地编辑数据库,它需要迁移,Django /数据库不是为了这种事情而做的。如果您需要这样做,您的应用程序设计很糟糕。如果你进一步解释为什么你甚至需要这样的东西,我可以推荐一些更好的设计模式,但现在是"下一个最好的东西"您可以使用随机JSON数据填充JsonField。因此,当您需要向学生添加排名时,您可以将这样的JSON转储到JsonField

{"rank": "value"}  

另一种方式(可能更好)是创建一个包含所有额外属性的相关模型。

class student(models.Model):
    ID = models.CharField(default='DUMMY_ID',primary_key=True,max_length=10)
    Score = models.CharField(default='DUMMY_Score',max_length=150)
    class = models.CharField(default='DUMMY_class',max_length=20)

class StudentProperty(models.Model):
    student = models.ForeignKey(student)
    key = models.CharField(max_length=128)
    value = models.CharField(max_length=256)

然后填充StudentProperty,其中rank是关键和良好,值为value。您可以动态地从模型创建新对象,但不能在模型上创建新字段。