所以,我的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)
现在的要求是用户(认为他是管理员/研究所所长)应该能够在数据库中添加新列,如section
或rank
等。
所以有没有办法动态地向表中添加一个新列,如果是,你可以用一个例子来解释它,因为我是Django的初学者。
DOUBT:如果有某种方法可以做到这一点,那么上面的models.py是否会有另一个条目(例如:rank= models.CharField(default='rank',max_length=20)
更改后?
以及为新列中的先前条目填充了哪些数据?
答案 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
。您可以动态地从模型创建新对象,但不能在模型上创建新字段。