关于django:根据其他模型创建字段

Create fields based on another model

我有一个带有一些字段的用户模型。其中一些需要反馈,是否正确填写(否则,特定消息将显示在用户配置文件上)。

问题是,如何在数据库中表示"无效"字段。我的想法是用OneTooneField创建另一个模型(称为extUser)。并且extuser应该和user具有相同的字段名,但它们的类型都是布尔型的,这决定了字段是否正确填写。例如,如果用户有一个名为email的字段:

1
email = models.CharField(max_length=100)

extuser将具有以下字段:

1
email = models.BooleanField(default=False)

这种方法有一个问题。如何在extuser中创建字段?当然,我可以手动创建它们,但这将打破干燥原理,我不会这样做。问题是,我可以动态地将字段添加到模型中,并将它们保存在数据库中吗(所以我假设在迁移之前需要调用它)?

我有Django1.8,我不想使用任何外部模块/库。

如果有人对如何在数据库中表示该数据有另一个想法,请添加注释,而不是回复-因为这个问题是关于动态创建字段。


您需要手动执行此操作。

python并不禁止这种行为;您可以查看动态创建的类上的so响应,但django将无法解释输出。特别是,Django依赖于模型来为应用程序创建SQL表,如果您的模型没有静态定义,那么基本上就没有办法实现这一点。

在这种情况下,我认为您不必太担心dry;如果您需要一个单独的模型,其中的字段恰好与另一个模型相关,但与另一个模型不同,我认为这可能是可以的。

最后,我不确定您的目标是什么,但是您可以定义一些函数,这些函数可以确定用户字段的"正确"程度。这就是我建议解决这个问题的方法(如果适用的话)。