python - Django UNIQUE 约束失败 : Site_coach. user_id

标签 python django django-forms django-views unique-constraint

我正在使用 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 是一个带有模型 coachModelForm,您可以进行相应调整。

关于python - Django UNIQUE 约束失败 : Site_coach. user_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49353692/

相关文章:

django - 为什么要在模板中使用管理表单?

python - 为什么这个sql脚本不执行?

python - 为什么我的代码在文件中多次重复

python - Django建模问题,需要外键字段的子集

python - 一些字符串没有在 django i18n 模块中翻译

django - 如何通过直通关系保存ManyToMany字段

python - 缩放 Tkinter 小部件

python - 是否有可能获得类似于 kwargs(python) 的传入参数字典?

python - 从 HTML 修改 Django 数据时出错

django - CBV中的form_valid()不调用is_valid()方法吗?