Django UNIQUE 约束失败:Site_coach.user_id
Django UNIQUE constraint failed: Site_coach.user_id
我正在 Python Django 中开发一个网站。我有一个模板 Register.html 和函数 "Register" 我希望我的用户在另一个页面上注册后将他们的附加信息放在这个页面上。
我的问题是,当我的用户第一次在我的表单中输入他们的附加信息时,它起作用了,但是如果我的用户想从同一页面上的同一表单更新他们的信息,他们会收到一个错误 "UNIQUE constraint failed: Site_coach.user_id"
我是初学者。你能帮我解决这个错误吗?
我的view.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})
我的Site/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()
我的users/models.py
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models
class CustomUserManager(UserManager):
pass
class CustomUser(AbstractUser):
objects = CustomUserManager()
我的forms.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 中开发一个网站。我有一个模板 Register.html 和函数 "Register" 我希望我的用户在另一个页面上注册后将他们的附加信息放在这个页面上。 我的问题是,当我的用户第一次在我的表单中输入他们的附加信息时,它起作用了,但是如果我的用户想从同一页面上的同一表单更新他们的信息,他们会收到一个错误 "UNIQUE constraint failed: Site_coach.user_id" 我是初学者。你能帮我解决这个错误吗?
我的view.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})
我的Site/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()
我的users/models.py
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models
class CustomUserManager(UserManager):
pass
class CustomUser(AbstractUser):
objects = CustomUserManager()
我的forms.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
,您可以相应地进行调整。