Python Django/重复键值违反唯一约束
我试图用OneToOneField扩展django auth用户模型,但无法解决这个问题 重复的键值违反唯一约束“用户\配置文件\用户\ id \键值” 详细信息:密钥(用户id)=(67)已存在 我看了一下这个问题,有人说数据库不同步 视图.py 型号.py forms.pyPython Django/重复键值违反唯一约束,python,django,views,django-users,Python,Django,Views,Django Users,我试图用OneToOneField扩展django auth用户模型,但无法解决这个问题 重复的键值违反唯一约束“用户\配置文件\用户\ id \键值” 详细信息:密钥(用户id)=(67)已存在 我看了一下这个问题,有人说数据库不同步 视图.py 型号.py forms.py 您最大的问题是:您试图创建配置文件的时间加倍: 通过信号和形式。 也许你可以去掉这个信号 或者尝试使用get\u或\u create而不是简单的create,因为我可以看到它不会破坏您的逻辑 def create_use
您最大的问题是:您试图创建配置文件的时间加倍: 通过信号和形式。 也许你可以去掉这个信号 或者尝试使用
get\u或\u create
而不是简单的create
,因为我可以看到它不会破坏您的逻辑
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.get_or_create(user=instance)
# ^^^^^^^^^^^^^^
并覆盖保存表单:
if user_form.is_valid() and profile_form.is_valid():
registration = user_form.save()
# Set user password
registration.set_password(user_form.cleaned_data.get('password'))
profile_form = UserProfileForm(request.POST, instance=registration.profile)
if profileis_valid():
profile.save()
非常感谢你。你能给我一些关于django的学习建议吗,很高兴能帮你,看这里,我现在知道了。我可以创建用户,但不能用它登录。你能看出我逻辑上的问题吗?。我用shell_检查,加上用表单创建的用户密码没有密码散列。添加
set_password
class UserRegistrationForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'username', 'password')
widgets = {
'password': forms.PasswordInput(),
}
class UserProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('user_image', 'birth_date',)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.get_or_create(user=instance)
# ^^^^^^^^^^^^^^
if user_form.is_valid() and profile_form.is_valid():
registration = user_form.save()
# Set user password
registration.set_password(user_form.cleaned_data.get('password'))
profile_form = UserProfileForm(request.POST, instance=registration.profile)
if profileis_valid():
profile.save()