django.db.utils.IntegrityError: NOT NULL constraint failed: main_profile.name
django.db.utils.IntegrityError: NOT NULL constraint failed: main_profile.name
我正在创建一个电报机器人,它是一个数据库。如果'@usename == None' returns django.db.utils.IntegrityError: NOT NULL constraint failed: main_profile.name What should I do ?
Models.py
from django.db import models
class Profile(models.Model):
external_id = models.PositiveIntegerField(
verbose_name='User ID',
unique=True,
)
name = models.TextField(
verbose_name='User name',
default='None'
)
def __str__(self):
return f' ID: {self.external_id} | Username: {self.name}'
class Meta:
verbose_name = 'Profile'
class Message(models.Model):
profile = models.ForeignKey(
to='main.Profile',
verbose_name='Profile',
on_delete=models.PROTECT,
null=True,
)
text = models.TextField(
verbose_name='Text',
)
Forms.py
from django import forms
from .models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = (
'external_id',
'name',
)
widgets = {
'name': forms.TextInput
}
您需要删除最后几个迁移,除了0001_initial.py
,您可以删除所有迁移。然后就去做python manage.py makemigrations your_app_name
然后python manage.py migrate
应该就解决了
你应该看看上面的答案,这个问题几乎总是与迁移有关,但如果不是,我猜你的 Profile
的 name
字段] 模型,如果你没有指定约束 null=True
,默认情况下它将是 False
所以它说你有义务给一个值(!= 一个空字符串),所以:
如果您正在做这样的事情:
def home_view(request):
context ={}
form = ProfileForm(request.POST)
if form.is_valid():
form.save()
context['form']= form
return render(request, "home.html", context)
当表单 class 收到 request
如果 name
输入中没有数据,它看起来像 {"name" : ""}
,因为请求对象首先有名称键,它不会使用 default='None'
然后将它传递给表单中的 create
方法,并根据为该特定字段定义的约束,db transaction
会增加 django.db.utils.IntegrityError
因为在数据库级别,该字段不允许 NULL
Django 文档:
"Field.null :如果为 True,Django 将在数据库中将空值存储为 NULL。默认为 False。"
我正在创建一个电报机器人,它是一个数据库。如果'@usename == None' returns django.db.utils.IntegrityError: NOT NULL constraint failed: main_profile.name What should I do ?
Models.py
from django.db import models
class Profile(models.Model):
external_id = models.PositiveIntegerField(
verbose_name='User ID',
unique=True,
)
name = models.TextField(
verbose_name='User name',
default='None'
)
def __str__(self):
return f' ID: {self.external_id} | Username: {self.name}'
class Meta:
verbose_name = 'Profile'
class Message(models.Model):
profile = models.ForeignKey(
to='main.Profile',
verbose_name='Profile',
on_delete=models.PROTECT,
null=True,
)
text = models.TextField(
verbose_name='Text',
)
Forms.py
from django import forms
from .models import Profile
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = (
'external_id',
'name',
)
widgets = {
'name': forms.TextInput
}
您需要删除最后几个迁移,除了0001_initial.py
,您可以删除所有迁移。然后就去做python manage.py makemigrations your_app_name
然后python manage.py migrate
应该就解决了
你应该看看上面的答案,这个问题几乎总是与迁移有关,但如果不是,我猜你的 Profile
的 name
字段] 模型,如果你没有指定约束 null=True
,默认情况下它将是 False
所以它说你有义务给一个值(!= 一个空字符串),所以:
如果您正在做这样的事情:
def home_view(request):
context ={}
form = ProfileForm(request.POST)
if form.is_valid():
form.save()
context['form']= form
return render(request, "home.html", context)
当表单 class 收到 request
如果 name
输入中没有数据,它看起来像 {"name" : ""}
,因为请求对象首先有名称键,它不会使用 default='None'
然后将它传递给表单中的 create
方法,并根据为该特定字段定义的约束,db transaction
会增加 django.db.utils.IntegrityError
因为在数据库级别,该字段不允许 NULL
Django 文档:
"Field.null :如果为 True,Django 将在数据库中将空值存储为 NULL。默认为 False。"