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

问题描述 投票:0回答:1

我正在尝试创建一个继承自django User的自定义User类。问题是我已经有一些用户在数据库中无法删除,而且我还有另一个类(比如报告),它们对用户有一个外键。我的问题是:有没有办法创建我的新User类并保留旧数据? 提前致谢。

python django django-models django-database
1个回答
1
投票

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

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时,您还需要创建此配置文件。你可以用post_save信号做到这一点。

@receiver(post_save, sender=User)
def create_special_user_profile(sender, instance, created, **kwargs):

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

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

现在你可以使用user.specialuserprofile.special_feature意义上的ORM。

通过这种方式,您将继续使用User模型作为基础,它不会混淆内置的用户相关功能,不会考虑新旧用户,您可以使用此新模型获取有关用户的任何其他信息。

© www.soinside.com 2019 - 2024. All rights reserved.