在 django 中使用已经在使用的数据库的新子类
Use new subclass with already in use database in django
我正在尝试创建一个自定义用户 class 继承自 django 用户。问题是我已经在数据库中有一些用户无法删除,而且我还有另一个 class (比方说报告)有用户的外键。我的问题是:有什么方法可以创建我的新用户 class 并保留旧数据吗?
提前致谢。
您可以创建链接回 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
模型作为基础,它不会与内置用户相关的功能混淆,不会考虑新老用户,你可以使用这个有关用户的任何其他信息的新模型。
我正在尝试创建一个自定义用户 class 继承自 django 用户。问题是我已经在数据库中有一些用户无法删除,而且我还有另一个 class (比方说报告)有用户的外键。我的问题是:有什么方法可以创建我的新用户 class 并保留旧数据吗?
提前致谢。
您可以创建链接回 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
模型作为基础,它不会与内置用户相关的功能混淆,不会考虑新老用户,你可以使用这个有关用户的任何其他信息的新模型。