完整性在 / 处出错



我一直在尝试使用django.contrib.auth.models的内置用户创建用户配置文件表单。一切正常,但是在将字段填写到表单(正在显示(中后,我在/说非空约束失败时遇到了完整性错误。 您可以使用此链接查看此图像,以确切了解错误显示的内容。

这是我 models.py 文件

from django.db import models
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator
# Create your models here.
class UserProfileInfo(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE, null=True)
phone_number = models.PositiveIntegerField(validators= 
[MaxValueValidator(9999999999)],blank=True)

def __str__(self): #This will print out this model
return self.user.username

这是我 forms.py 文件。

from django import forms
from django.contrib.auth.models import User
from Login_Signup_Form.models import UserProfileInfo
class UserForm(forms.ModelForm):
password = forms.CharField(widget=forms.PasswordInput())
class Meta:   
model=User
fields=('first_name','last_name','username','email','password',)
class UserProfileForm(forms.ModelForm):
class Meta:
model=UserProfileInfo    #this is model
fields=('phone_number',)

这是我 views.py 文件。

from django.shortcuts import render
from Login_Signup_Form.forms import UserForm,UserProfileForm
from Login_Signup_Form.models import UserProfileInfo
# Create your views here.
def index(request):
return render(request,'base.html')
def register(request):
registered=False
if request.method == 'POST':
user_form = UserForm(data=request.POST)  
user_phone_number=UserProfileForm(data=request.POST)
if user_form.is_valid() and user_phone_number.is_valid():
user=user_form.save()
user.set_password(user.password)
user.save()
phone = user_phone_number.save()
phone.user=user    
else:
#Printing the errors
print(user_form.errors,user_phone_number.errors)
else:
user_form = UserForm()
user_phone_number = UserProfileForm()

return render(request, 'base.html',{'user_form':user_form, ' 
phone_number':user_phone_number})

该错误可能来自表单中的空电话号码。您允许在表单中使用空phone_numberblank=True,但在数据库级别不允许这样做,您还需要添加null=True

phone_number = models.PositiveIntegerField(validators= 
[MaxValueValidator(9999999999)], blank=True, null=True)

看到这个伟大的答案。

有了blank=True该字段不是必需的,表单将进行验证,但它会引发完整性错误,因为null=True不在这里。但是,CharField不会发生这种情况,空白值将存储为空字符串。这只会因为PositiveIntegerField而发生。

相关内容

  • 没有找到相关文章

最新更新