python - django.db.utils.IntegrityError:NOT NULL 约束失败:users_profile.user_id
问题描述
我目前正在从事一个项目,该项目将接收用户信息并存储它。我的问题是我一直遇到这个 NOT NULL 约束失败并出现用户 ID 错误。我相信这来自于在表单试图保存时有一个空用户,但不知道我能做些什么来修复它。我尝试使用这条线:
form.user = Profile.objects.get(user=self.request.user)
但它没有用,并给了我这个错误:
/users/pii/ 处的名称错误
名称“自我”未定义
任何可以为我指明正确方向的帮助或建议将不胜感激!
模型.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
image = models.ImageField(default='default.jpg', upload_to='profile_pics')
gender = models.CharField(max_length = 1, choices = GENS, default = '')
birthday = models.DateField(default = '1900-01-01')
address = AddressField(on_delete=False, blank=True, null=True)
race = models.CharField(max_length = 2, choices = RACES, default = 'x')
ethnicity = models.CharField(max_length = 1, choices = ETHNICITIES, default = 'x')
income = models.CharField(max_length = 1, choices = INCBRACKET, default = 'x')
education = models.CharField(max_length = 2, choices = EDUCATION, default = 'x')
employment = models.CharField(max_length = 1, choices = EMPLOYMENT, default = 'x')
def __str__(self):
return f'{self.user.username} Profile'
def save(self, *args, **kawrgs):
super().save(*args, **kawrgs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
视图.py
def PII(request):
if request.method == 'POST':
form = PIIForm(request.POST,)
if form.is_valid():
form.save()
messages.success(request, f'Your account has been created! You are now able to log in')
return redirect('finalpii')
else:
form = PIIForm(request.POST)
return render(request, 'users/pii.html', {'form':form})
表格.py
class PIIForm(forms.ModelForm):
birthday = forms.DateField()
class Meta:
model = Profile
fields = [
'gender',
'birthday',
'address',
'race',
'ethnicity'
]
解决方案
您必须将模型user
字段编辑Profile
为...
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
null=True
, Django 会将空值作为 NULL 存储在数据库中。默认为假。
blank=True
,表单验证将允许输入空值。默认为假。
然后运行python manage.py makemigrations
和python manage.py migrate
命令,然后您可以添加Null
用户配置文件。
推荐阅读
- javascript - 在 Cordova 上处理字典的 JavaScript 意外行为
- python - 更新 django result_list 字段时区
- json - Mongodb嵌套集合检索
- sql-server - 如何在 T-SQL 中获取 TZoffset?
- install4j - 是否可以将自定义脚本片段添加到 unix install4j 卸载程序?
- twitter-bootstrap - 为什么 flex-fill 在引导程序中没有创建相等的宽度?
- python - Python 3.7 import requests returns "Chardet" error
- r - r中的lag和zlag函数有什么区别?
- c# - RichTextBox 行间距 winform C#
- syntax - Spyder 编辑器不显示正确的颜色文本 - 我该如何纠正?