[英]django.db.utils.IntegrityError: NOT NULL constraint failed: home_post.author_id
[英]Django runserver fails with django.db.utils.IntegrityError: NOT NULL constraint failed: reviewer_post.post_id (AutoField)
這是我的models.py文件,它使用AutoField作為post_id,這是一個主鍵,因此是唯一的。 如我所讀,AutoField會自動遞增。
from django.db import models
class Post(models.Model):
post = models.CharField(max_length=1000,unique=True)
post_id = models.AutoField(primary_key=True)
neg = models.IntegerField(default=0)
pos = models.IntegerField(default=0)
is_money= models.CharField(max_length=1,default = "y")
def __str__(self):
return self.post+"\tScore : "+str(self.neg+self.pos)
我有一個startup.py文件,它使用以下代碼將記錄添加到db中。 我已經使用get_or_create
函數來檢查帖子是否退出,否則創建它Post.objects.get_or_create(post = text ,defaults={'neg':0,'pos':0,'is_money':has_money_tags})
def add_to_db(self):
from reviewer.models import Post
Post.objects.all().delete()
import django
django.setup()
for num,i in enumerate(self.unlabelled):
print num
money_tags=self.getHashTagsfromContent(i[0])
text = re.sub(r'#[^\s]+',"",i[0])
y_n=i[1] if i[1].strip()=='y' or i[1].strip()=='n' else filter(None,map(lambda x : x.strip("]'[ \n\t"),i[1].split(",")))
if isinstance(y_n,list):
money_tags=money_tags+y_n
has_money_tags=y_n if y_n =='y' or y_n=='n' else self.isMoney(money_tags)
self.logger.info(str(text)+"\t"+str((num+1))+"\t"+str(has_money_tags)+"\n")
p,created=Post.objects.get_or_create(post = text ,defaults={'neg':0,'pos':0,'is_money':has_money_tags})
def run():
r=Reviewer_Data()
r.add_to_db()
這是makemigrations之后創建的Migrations類
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Post',
fields=[
('post', models.CharField(unique=True, max_length=1000)),
('post_id', models.AutoField(serialize=False, primary_key=True)),
('neg', models.IntegerField(default=0)),
('pos', models.IntegerField(default=0)),
('is_money', models.CharField(default=b'y', max_length=1)),
],
),
]
當我執行python manage.py runserver
。 它給我列post_id django.db.utils.IntegrityError: NOT NULL constraint failed: reviewer_post.post_id
的錯誤django.db.utils.IntegrityError: NOT NULL constraint failed: reviewer_post.post_id
我試圖在服務器啟動期間在數據庫中添加一些記錄,並且在沒有唯一字段的情況下它可以工作,但是當我更新模型文件以使兩個字段唯一的post和post_id時,post_id開始出現問題。
如何確保添加唯一字段才能工作?
任何幫助表示贊賞。
我剛開始使用django,所以我一直堅持下去。 這就是我嘗試過的方法。
正如多米諾骨牌建議的那樣,我刪除了Django自動處理的名為id的主鍵的post_id字段。 現在是我的models.py文件。
from django.db import models
class Post(models.Model):
post = models.CharField(max_length=1000,unique=True)
neg = models.IntegerField(default=0)
pos = models.IntegerField(default=0)
is_money= models.CharField(max_length=1,default = "y")
def __str__(self):
return self.post+"\tScore : "+str(self.neg+self.pos)
我已經刪除了遷移文件夾。 我之前沒有做過syncdb。我還在學習中,並且在Django方面遠遠落后於我。
這是AdriánDeccico如何在SO的另一個答案中刪除表- 如何在DJango中從SQLite3中刪除表? 。 首先,我這樣做了,還刪除了migrations文件夾。
./manage.py sqlclear reviewer | ./manage.py dbshell
./manage.py syncdb
然后運行python manage.py migrate
python manage.py sqlmigrate reviewer 0001
和python manage.py sqlmigrate reviewer 0001
,然后運行python manage.py runserver
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.