如何为用户提供在数据库中创建新列的选项

时间:2018-10-14 21:02:12

标签: django

通过书本方式是否存在一种允许用户向站点数据库表中添加列的方法。例如,如果该网站是关于动物的,则一个用户可能希望获得有关其犬种的“每周行走”和“食物类型”等统计信息。但是另一个用户可能希望跟踪山羊生产的牛奶量。

所以,如果我有一个“动物”类,请提供基本信息。例如“品种”,“动物名”,“ DOB”,“ DOD”。但是,然后在前端有一个表单,该表单将允许用户添加他们想要的所有其他列。

这可能吗?希望我已经解释得足够好。

1 个答案:

答案 0 :(得分:1)

@WillemVanOnsem在评论中已经提到了一些不错的选择。我要说的是,根据用户输入来修改架构的结构是一个非常糟糕的主意,并为滥用提供了另一条途径……尤其是对于Django,这意味着您要么无法将ORM的迁移工具用于一些模型,或者您可能必须做一些非常糟糕的自动化。

如果您的动物类型定义明确且一致,则可以考虑(谨慎地)使其成为predefined_code模型的子类。否则,这将是处理它的最简单方法(请注意,以下不是有效的代码,它需要字段类型的必需参数):

Animal

如果不共享属性(例如,用户直接输入动物的名称和属性,而不是从现有列表中挑选动物。

如果您需要提供用户可以从中选择的规范化属性列表(实际的EAV,如果可能的话,应避免这样做,因为它将某些数据结构从代码移至数据持久层),在您的模型要复杂一些。例如:

class AnimalAttribute(models.Model):
    animal = models.ForeignKey(Animal)
    name = models.CharField()
    value = models.CharField()