【问题标题】:how to add dynamic fields at run time in django如何在运行时在 django 中添加动态字段
【发布时间】:2015-12-29 06:46:19
【问题描述】:

我必须在运行时在我的 django 应用程序中添加动态字段,但我不知道如何在运行时添加新字段的正确方法。

我想添加将生成动态字段并更新数据库的代码。我正在使用 postgresql 数据库。如果有人可以请帮忙。

我的“model.py”就是这样的:

class Student(models.Model):

    name=models.CharField(max_length=100)
    school=models.CharField(max_length=100)
    created_at=models.DateField(auto_now_add=True)  
    is_active=models.BooleanField(default=False)


    def __str__(self):
        return self.name

【问题讨论】:

  • 建议 - 使用 division 作为列名。不要使用class 作为列名,因为class 关键字有自己的属性。
  • 感谢您的建议。我改了。
  • 你能说出动态字段的用例是什么吗?
  • 其实我正在尝试为大学开发一个应用程序。我将在 model.py 中为学生添加所有必要的字段,但如果大学管理员根据他们的需要想要一个属性,例如他们自己的college_id或任何其他,然后呢?这就是为什么我希望在运行时添加新字段的选项。
  • 你有一个要求,假设一些学生有其他人没有的属性,并且有很多可能性吗?如果是这样,请查看 NoSQL(文档存储、列存储……),那里的架构约束更加松散。一些指导:Django MongoHow to use Cassandra in Django framework 希望这会有所帮助。

标签: python django dynamic django-models


【解决方案1】:

Django 不是为动态模型而设计的,因为关系数据库不是。在运行时更改模型会产生大量问题。

你必须模拟它,通过...

  • 相关模型的巧妙运用
  • 在大字段中存储值,例如JSON 为文本
  • 具有将数据存储为键、值的通用模型;例如以 PK、FK、键、值作为列的表。

你应该尝试第一个选项,只有当它不起作用时才尝试其他两个。

【讨论】:

  • 他还可以使用 NoSQL(文档存储、列存储……)。但是,我不明白这种情况下应用程序的动态要求是什么。
  • 其实我正在尝试开发一个大学数据库的应用程序。我将添加与大学数据库相关的所有必要字段,但如果大学管理员根据他们的需要想要一个属性,例如他们自己的college_id或任何其他,然后呢?这就是为什么我希望在运行时根据大学管理员添加新字段的选项。有没有其他解决办法???
  • 不要那样做。他们会弄乱它和数据库,并且它的数据将在短时间内变得无法维护。如果需要额外的字段,他们应该向您提交更改请求。使用表单模型和 Django 中的所有其他优秀功能,您可以快速添加它。您可以检查该字段是否聪明,适合应用程序并且尚未添加到其他地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2021-06-18
  • 1970-01-01
相关资源
最近更新 更多