通过信号更新用户名时出错

时间:2015-09-24 02:07:19

标签: python django django-models django-signals

我想知道如何更新Django Users用户名。我使用的是默认身份验证模型,其中OneToOne关系适用于自定义ProfileProfile可以通过最终用户进行更新,并且已设置信号以监听更改并相应地进行更新。

即使用户名是乱码或根本没有改变,同样的错误也会发生,所以我不确定为什么违反了唯一约束。

# models

class Profile(models.Model):
    client = models.OneToOneField('auth.User', related_name='profile')


# signals

@receiver(pre_save, sender=Profile, weak=False)
def sync_profile_auth(sender, instance, **kwargs):
    if instance.pk:
        instance.client.first_name = instance.first_name
        instance.client.last_name = instance.last_name
        instance.client.email = instance.email
        instance.client.username = instance.email
        instance.client.save()

# error
django.db.utils.IntegrityError: duplicate key value violates unique constraint "auth_user_username_key"
DETAIL:  Key (username)=(myuser@admin.com) already exists.

干杯。

1 个答案:

答案 0 :(得分:0)

第一个问题:

也许您正在尝试更新已存在于数据库中的用户。

第二个问题:

username = models.CharField(_('username'), max_length=30, unique=True,
    help_text=_('Required. 30 characters or fewer. Letters, numbers and '
                '@/./+/-/_ characters'),
    validators=[
        validators.RegexValidator(re.compile('^[\w.@+-]+$'), _('Enter a valid username.'), 'invalid')
    ])

变量用户名为max_length=30。如果用户的电子邮件超过30个字符,则无法注册。

这可以对您有所帮助。
Customize User Model