Django 基于其他模型创建字段

Django 基于其他模型创建字段,django,django-models,Django,Django Models,我有一个带有一些字段的用户模型。其中一些需要反馈,是否正确填写(如果没有,具体信息将显示在用户配置文件上) 问题是,如何在数据库中表示“无效”字段。我的想法是创建另一个模型(称为ExtUser),使用OneToOneField-to-User。ExtUser和User的字段名应该和User相同,但它们的类型都是布尔型的,这决定了字段是否正确填写。例如,如果用户有一个名为email的字段: email = models.CharField(max_length=100) ExtUser将具有以下

我有一个带有一些字段的用户模型。其中一些需要反馈,是否正确填写(如果没有,具体信息将显示在用户配置文件上)

问题是,如何在数据库中表示“无效”字段。我的想法是创建另一个模型(称为ExtUser),使用OneToOneField-to-User。ExtUser和User的字段名应该和User相同,但它们的类型都是布尔型的,这决定了字段是否正确填写。例如,如果用户有一个名为email的字段:

email = models.CharField(max_length=100)
ExtUser将具有以下字段:

email = models.BooleanField(default=False)
这种方法有一个问题。我应该如何在ExtUser中创建字段?当然,我可以手动创建它们,但这违反了DRY原则,我不会这么做。问题是,我可以动态地将字段添加到模型中,并将它们放在数据库中(所以我假设在迁移之前需要调用它)

我有django 1.8,我不想使用任何外部模块/库


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

您需要手动执行此操作

Python不允许这种行为;您可以查看一下,但Django将无法解释输出。尤其是,Django依赖于模型来为应用程序创建SQL表,如果您的模型不是静态定义的,那么这种情况基本上是不可能发生的

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


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

在我询问之前,我发现:它是有效的,但只有在我迁移一个应用程序时才有效(可能这句话是错误的,我没有足够的时间进行调试,但在旧数据库上迁移会正确地添加新字段)。当应用所有迁移(例如新数据库)时,我得到了
django.db.utils.OperationalError:重复的列名:new_field
确实很有趣!我会看一看,看看我能做些什么。不幸的是,这些检查corectness的函数并不存在。我需要将文本值与图像进行比较。太复杂了,太少了,无法实现自动化。我明白你关于检查功能的观点(这只是一个想法)。从您链接的文章中可以看出:“这意味着像South这样的迁移工具无法检测到新字段,需要采取一些变通方法,例如创建手动迁移”。这让我觉得这种方法(特别是对于单个类)对您来说工作太多了。根据这句话,您仍然需要手动完成某些操作,而自己进行迁移是一件非常痛苦的事情。我仍然建议简单地将字段添加到ExtUser中。好吧,我宁愿添加一个CharField,它将包含不正确的字段名和详细的名称。我不喜欢它,但对我来说,它是比手动添加字段更好的解决方案:)另外,关于手动迁移的这一点,我正在编写的项目的特殊性来了。在生产过程中不会更换型号,生产阶段只有大约2周的时间。所以只要删除旧数据库就不会有问题。无论如何,我希望有一天会有人来解释为什么会出现重复列错误。