Python 如何修复django中的无空约束
我使用OneToOne关系创建一个用户,当我在表单中输入数据并提交它时,我没有得到空约束错误 view.py form.py models.py 您的UserProfile模型需要工资,但您的表单只有一个位置字段。因此,当您的表单随位置一起提交时,它是有效的,但无法保存基础模型,因为薪资将为零 将“薪资”字段添加到表单中,或使“薪资”字段为空 此外,您需要在保存配置文件之前分配用户字段,因为这也是不可为空的。一种方法是:Python 如何修复django中的无空约束,python,django,Python,Django,我使用OneToOne关系创建一个用户,当我在表单中输入数据并提交它时,我没有得到空约束错误 view.py form.py models.py 您的UserProfile模型需要工资,但您的表单只有一个位置字段。因此,当您的表单随位置一起提交时,它是有效的,但无法保存基础模型,因为薪资将为零 将“薪资”字段添加到表单中,或使“薪资”字段为空 此外,您需要在保存配置文件之前分配用户字段,因为这也是不可为空的。一种方法是: user = form.save() # this is the Use
user = form.save() # this is the UserForm so when saving it returns the user
profile = form_class.save(commit=False)
profile.user = user
profile.save()
我建议您仔细阅读上的Django文档。特别是上的部分将解释如何正确处理这些情况。您应该向我们展示整个错误跟踪。顺便说一句,这样可以更容易地确定确切的错误是什么以及发生在哪里。@dirkgrotenception Type:IntegrityError异常值:NOT NULL约束失败:try1_userprofile.user_id@dirkgroten 异常类型:IntegrityError异常值:非空约束失败:try1\u userprofile.user\u id
class Registerform(UserCreationForm):
class Meta:
model=User
fields= ['username','first_name','last_name','password1','password2']
def save(self, commit=True):
user=super(Registerform, self).save(commit=False)
user.first_name=self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
if commit:
user.save()
return user
class ProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = [ 'location']
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
description = models.TextField(max_length=500, blank=True)
location = models.CharField(max_length=30, blank=True)
birth_date = models.DateField(null=True, blank=True)
salary=models.CharField(max_length=120)
def __str__(self):
return self.location
user = form.save() # this is the UserForm so when saving it returns the user
profile = form_class.save(commit=False)
profile.user = user
profile.save()