gpt4 book ai didi

python - Django runserver 失败,并显示 django.db.utils.IntegrityError : NOT NULL constraint failed: reviewer_post. post_id (AutoField)

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:00 26 4
gpt4 key购买 nike

这是我的 models.py 文件,它使用 AutoField 作为主键,因此它是唯一的。正如我所读到的,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 文件,它使用以下代码将记录添加到数据库中。我使用 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 约束失败: reviewer_post.post_id

我试图在服务器启动期间在数据库中添加一些记录,并且在没有唯一字段的情况下它可以工作,但是当我更新模型文件以使两个字段唯一的 post 和 post_id 时,它开始出现 post_id 问题。

如何确保添加唯一的字段可以正常工作?

感谢任何帮助。

最佳答案

我刚刚开始使用 django,所以我一直被这个问题困扰。这是我尝试过的有效方法。

正如多米诺建议的那样,我删除了 post_id 字段,Django 自动处理创建名为 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án Deccico 在 SO - How do I drop a table from SQLite3 in DJango? 的另一个答案中删除表格的方式。 。首先,我这样做了,还删除了迁移文件夹。

./manage.py sqlclear reviewer | ./manage.py dbshell 
./manage.py syncdb

然后是python manage.py migrate,然后是python manage.py sqlmigrate reviewer 0001,然后是python manage.py runserver,它起作用了。

关于python - Django runserver 失败,并显示 django.db.utils.IntegrityError : NOT NULL constraint failed: reviewer_post. post_id (AutoField),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34585441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com