Python 使用django中已在使用的数据库的新子类

Python 使用django中已在使用的数据库的新子类,python,django,django-models,django-database,Python,Django,Django Models,Django Database,我正在尝试创建一个从django User继承的自定义用户类。问题是我已经在数据库中有一些用户不能被删除,而且我还有另一个类(比如reports),它有一个用户的外键。我的问题是:有没有办法创建我的新用户类并保留旧数据 提前感谢。您可以创建相关模型,链接回用户。如果您有不同类型的用户,这是一种常见的方法,但也有其他用例 class SpecialUserProfile(models.Model): user = models.OneToOneField(User, null=True,

我正在尝试创建一个从django User继承的自定义用户类。问题是我已经在数据库中有一些用户不能被删除,而且我还有另一个类(比如reports),它有一个用户的外键。我的问题是:有没有办法创建我的新用户类并保留旧数据

提前感谢。

您可以创建相关模型,链接回
用户
。如果您有不同类型的用户,这是一种常见的方法,但也有其他用例

class SpecialUserProfile(models.Model):
    user = models.OneToOneField(User, null=True, blank=True, on_delete=models.SET_NULL)
    special_feature = models.CharField(max_length=100, null=True, blank=True)
    etc.
当新用户添加到
user
时,您还需要创建此配置文件。你可以用信号来做这件事

您可以使用或编写并运行一个临时函数为现有用户创建配置文件,该函数在
user
中为现有用户执行此操作

现在,您可以在
user.specialuserprofile.special\u功能
的意义上使用ORM


这样,您将继续使用
用户
模型作为基础,它不会干扰内置的用户相关功能,不会考虑新用户和旧用户,您可以使用此新模型获取有关用户的任何其他信息。

您真的需要两个不同的用户类吗?或者一个属性(例如用户的角色)就足够了。你的目标是什么?@niklas我希望我的用户能够存储多封电子邮件。现在我的选择是使用多对一关系,其中我有一个ExtraEmails类,该类有一个用户模型的外键。谢谢。这是一个绝妙的方法,或多或少是我现在正在做的事情。但如果我将user改为specialsErrorFile.user,我必须对代码进行大量修改。这就是为什么我想知道是否有一种方法可以在不丢失数据的情况下继承用户模型。是的,在项目后期更改base
User
model是很困难的。这是最优雅的解决方案。因此,在启动新项目时,建议始终通过子类化创建自定义
用户
模型。但我们都会犯错误,或者忘记这一点。我知道我至少忘记了两次。
@receiver(post_save, sender=User)
def create_special_user_profile(sender, instance, created, **kwargs):

    if created:
        SpecialUserProfile.objects.create(user=instance)