【问题标题】:On demand column creation for model in django在 django 中为模型按需创建列
【发布时间】:2018-04-05 19:23:18
【问题描述】:

所以,我的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 的初学者。

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

【问题讨论】:

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


    【解决方案1】:

    那么有什么办法可以动态地向表中添加新列

    没有。

    你不能在旅途中编辑数据库,它需要迁移,而 Django/databases 并不是为这种事情而设计的。如果您需要这样做,您的应用程序的设计很糟糕。如果你进一步解释为什么你甚至需要这样的东西,我可以推荐一些更好的设计模式,但现在“下一个最好的东西”可能是JsonField,你可以用随机 JSON 数据填充。因此,当您需要为学生添加排名时,您可以像这样将 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。您可以从模型动态创建新对象,但不能在模型上创建新字段。

    【讨论】:

    • 问题是用户应该能够在应用程序部署后添加列或您提到的内容。所以,它不应该编辑models.py 文件
    • @VinayGuda 是的,这就是我的回答。
    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 2018-01-21
    • 2020-09-23
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    相关资源
    最近更新 更多