我有一些带有一些字段的用户模型。其中一些将需要反馈,是否正确填写(如果没有,特定消息将显示在用户配置文件中)。
问题是,如何表示无效'数据库中的字段。我的想法是使用OneToOneField创建另一个模型(称为ExtUser)到User。 ExtUser应该有相同的字段' name为User,但它们的类型都是boolean,用于确定字段是否正确填充。例如,如果用户有一个名为email的字段:
email = models.CharField(max_length=100)
ExtUser会有以下字段:
email = models.BooleanField(default=False)
这是这种方法的问题。我应该如何在ExtUser中创建字段?当然我可以手动创建它们,但这会打破DRY原则,我不打算这样做。问题是,我可以动态地为模型添加字段,并将它们放在数据库中(所以我假设它需要在迁移之前调用)?
我有django 1.8,我不想使用任何外部模块/库。
如果有人对如何在数据库中表示数据有另一个想法,请添加评论,而不是回复 - 因为这个问题是关于动态创建字段。
答案 0 :(得分:1)
您需要手动执行此操作。
Python不会禁止这种行为;你可以看看this SO response on dynamically created classes,但Django将无法解释输出。特别是,Django依赖于模型为应用程序创建SQL表,如果模型没有静态定义,基本上没有办法发生这种情况。
在这种情况下,我认为你不必担心DRY;如果你需要一个单独的模型,其中的字段恰好与另一个模型相关但不同,我认为它可能没问题。
最后,我不确定你的目标是什么,但你可以定义一些可以决定如何纠正"用户的字段是。这就是我建议解决这个问题的方法(如果适用的话)。