我正在使用 Python Django 开发一个网站。我有一个带有“注册”功能的模板 Register.html 我希望我的用户在另一个页面注册后将其附加信息放在此页面上。 我的问题是,当我的用户第一次将附加信息放入我的表单中时,它可以工作,但是如果我的用户想要从同一页面上的同一表单更新他们的信息,他们会收到错误“UNIQUE 约束失败:Site_coach.user_id ” 我是初学者。你能帮我解决这个错误吗?
我的观点.py
from django.shortcuts import render
from .forms import RegisterForm
def Register(request):
form = RegisterForm(request.POST or None, request.FILES)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
form.save()
return render(request, 'Register.html', {'form': form})
我的网站/models.py
class coach(models.Model):
user = models.OneToOneField(CustomUser,on_delete=models.CASCADE)
Telephone = models.IntegerField()
TestResult = models.IntegerField(null=True, blank=True)
Level = models.TextField()
我的用户/models.py
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models
class CustomUserManager(UserManager):
pass
class CustomUser(AbstractUser):
objects = CustomUserManager()
我的表单.py
from django import forms
from .models import coach
class RegisterForm(forms.ModelForm):
class Meta:
model = coach
exclude = ('user','TestResult')
最佳答案
您需要传递正在修改的对象的实例,否则将创建一个新对象,并且保存将失败,因为它是 OneToOne
:
def Register(request):
try:
coach_instance = coach.objects.get(user=request.user)
except coach.DoesNotExist:
coach_instance = coach(user=request.user)
form = RegisterForm(request.POST or None, request.FILES, instance=coach_instance)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
form.save()
return render(request, 'Register.html', {'form': form})
我假设 RegisterForm
是一个带有模型 coach
的 ModelForm
,您可以进行相应调整。
关于python - Django UNIQUE 约束失败 : Site_coach. user_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353692/