我正在創建一個電報機器人,它是一個資料庫。如果 '@usename == None' 它回傳 django.db.utils.IntegrityError: NOT NULL constraint failed: main_profile.name 我該怎么辦?
模型.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',
)
表格.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
}
uj5u.com熱心網友回復:
你應該看看上面的答案,這個問題幾乎總是與遷移有關,但如果不是,我猜在name你的Profile模型領域,如果你不指定約束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)
當表單類接收到如果request輸入中沒有name資料時,它看起來像,并且基于為該特定欄位定義的約束,將上升,因為在 DB 級別,該欄位不允許{"name" : ""}default='None'createdb transactiondjango.db.utils.IntegrityErrorNULL
Django 檔案:
“Field.null :如果為 True,Django 會將空值作為 NULL 存盤在資料庫中。默認為 False。”
uj5u.com熱心網友回復:
您需要洗掉最后幾個遷移,除了0001_initial.py. 然后就去做python manage.py makemigrations your_app_name,然后python manage.py migrate就應該解決了
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455041.html
標籤:Python django django模型 电报机器人
上一篇:解壓python字典并保存為變數
