Python Django唯一约束失败:站点\u coach.user\u id

Python Django唯一约束失败:站点\u coach.user\u id,python,django,django-forms,django-views,unique-constraint,Python,Django,Django Forms,Django Views,Unique Constraint,我正在用Python Django开发一个网站。我有一个带有函数“Register”的模板Register.html,我希望我的用户在另一个页面上注册后,将他们的附加信息放在这个页面上。 我的问题是,当我的用户第一次将他们的附加信息放入我的表单时,它会起作用,但如果我的用户希望在同一页面上从同一表单更新他们的信息,他们会收到一个错误“唯一约束失败:Site\u coach.user\u id” 我是初学者。你能帮我纠正这个错误吗 我的观点.py from django.shortcuts imp

我正在用Python Django开发一个网站。我有一个带有函数“Register”的模板Register.html,我希望我的用户在另一个页面上注册后,将他们的附加信息放在这个页面上。 我的问题是,当我的用户第一次将他们的附加信息放入我的表单时,它会起作用,但如果我的用户希望在同一页面上从同一表单更新他们的信息,他们会收到一个错误“唯一约束失败:Site\u coach.user\u 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()
from django.contrib.auth.models import AbstractUser, UserManager
from django.db import models

class CustomUserManager(UserManager):
    pass
class CustomUser(AbstractUser):
    objects = CustomUserManager()
我的用户/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()
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
是一个
ModelForm
模型
coach
,您可以相应地进行调整。

谢谢!但我不明白我的状态需要调整什么?不客气。您可能不需要调整任何内容。如果
RegisterForm
确实是带有模型
coach
ModelForm
,则此代码应该可以正常工作。如果不是,您需要获得正确的对象作为实例传递给表单。现在我有了“form=RegisterForm(request.POST或None,request.FILES,instance=coach\u instance)”,但现在我在这个页面上直接出现了一个错误“full\u clean()缺少1个必需的位置参数:'self'”无法想象这是从哪里来的。你能在问题中添加完整的错误跟踪吗?是的,当然!因此,我尝试打开Register.html,得到了错误。这是完整的痕迹