【发布时间】:2024-01-08 18:29:01
【问题描述】:
我想知道如何更新 Django 用户用户名。我正在使用默认的身份验证模型,与自定义 Profile 的关系为 OneToOne。 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.
干杯。
【问题讨论】:
-
该错误与您分享给我们的代码无关!您以某种方式尝试使用现有用户名添加用户或更新。
-
@Jamie 当有人尝试将用户名更改为现有用户名时,您会期待什么?
-
@PauloPessoa - 我希望用户名与电子邮件同步更新,除非电子邮件地址已被占用
-
@ozgur - 你是对的,你能把你的评论改成回复回复,这样我就可以更新并关闭了。
-
@JamieStrauss 我认为你对这种情况有很大的问题。
标签: python django django-models django-signals