【发布时间】:2022-01-21 09:25:42
【问题描述】:
每当我调用 form.save() 时,我都会收到“django.db.utils.IntegrityError: UNIQUE constraint failed: legal_useragreedtolegal.user_id”
我认为这可能是因为我有一个 oneToOneField 并且 Django 正在尝试保存到 UserAgreedToLegal 和 User Model 但 User 模型已经具有该 ID,因此唯一约束失败,但不确定。
我想知道如何解决这个问题。我在下面列出了我的模型、表单和视图代码
models.py
import uuid
from django.contrib.auth.models import User
from django.db import models
from django.utils import timezone as django_timezone
class UserAgreedToLegal(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
agreed_first_terms_of_service = models.BooleanField(default=False, blank=False, null=False)
date_agreed = models.DateField(null=True, default=django_timezone.now)
uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
def __str__(self):
return self.user.username
forms.py
from django import forms
from legal.models import UserAgreedToLegal
class TermsOfServiceAgreementForm(forms.ModelForm):
class Meta:
model = UserAgreedToLegal
fields = [
'agreed_first_terms_of_service'
]
views.py
if request.method == 'POST':
form = TermsOfServiceAgreementForm(request.POST)
if form.is_valid():
form.clean()
terms_of_service_agreement = form.save(commit=False)
terms_of_service_agreement.user = request.user
terms_of_service_agreement.save()
结果是
django.db.utils.IntegrityError: UNIQUE constraint failed: legal_useragreedtolegal.user_id
【问题讨论】:
-
A
OneToOneField表示同一用户不能有两个或多个UserAgreedToLegals。
标签: python django django-forms