我想知道如何更新Django Users用户名。我使用的是默认身份验证模型,其中OneToOne
关系适用于自定义Profile
。 Profile
可以通过最终用户进行更新,并且已设置信号以监听更改并相应地进行更新。
即使用户名是乱码或根本没有改变,同样的错误也会发生,所以我不确定为什么违反了唯一约束。
# 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.
干杯。
答案 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