Django UserProfile信号创建用户,first_name,last_name

时间:2017-09-12 10:13:47

标签: python django django-models

当我使用用户数据创建UserProfile时,我也希望传递给first_name和last_name。

这是我的models.py

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    first_name = models.CharField(max_length=200, blank=True, null=True, default=None)
    last_name = models.CharField(max_length=200, blank=True, null=True, default=None)

def post_save_user(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)


post_save.connect(post_save_user, sender=settings.AUTH_USER_MODEL)

我已经尝试使用UserProfile.objects.create(user=instance, first_name=instance.first_name, last_name=instance.last_name),它正在创建配置文件,但它没有添加first_name和last_name。

问题:如何使用用户数据将first_name和last_name添加到配置文件?

1 个答案:

答案 0 :(得分:-1)

你不期待任何魔法发生,对吗?尝试使用以下内容扩展信号接收器:

def post_save_user(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(
            user=instance,
            first_name=instance.first_name,
            last_name=instance.last_name,
        )

但是,老实说,这个答案属于垃圾桶:正如@ daniel-roseman已经指出的那样,你存储了冗余数据。如果您真的希望有单独的UserProfile模型,请考虑将first_namelast_name设为@property(可能与@_.setter一起使用数据存储在auth.User模型中。