Python Django runserver因Django.db.utils.IntegrityError失败:非空约束失败:审阅者\u post.post\u id(自动字段)
这是我的models.py文件,它使用AutoField作为post_id,这是一个主键,因此它是唯一的。正如我所读到的,AutoField会自动递增Python Django runserver因Django.db.utils.IntegrityError失败:非空约束失败:审阅者\u post.post\u id(自动字段),python,django,sqlite,Python,Django,Sqlite,这是我的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 = mod
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\u或\u create
函数来检查post是否存在其他创建它的方法post.objects.get\u或\u create(post=text,默认值={'neg':0,'pos':0,'is\u money':has\u money\u tags})
这是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\u iddjango.db.utils.integrityyerror:notnull约束失败:reviewer\u post.post\u id
我试图在服务器启动期间在数据库中添加一些记录,但在没有唯一字段的情况下,它工作了,但当我更新模型文件使两个字段成为唯一的post和post_id时,post_id开始出现问题
如何确保添加一个唯一的字段来工作
非常感谢您的帮助。我刚开始学习django,所以我一直在坚持这一点。 这是我试过的有效方法 正如domino建议的那样,我删除了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)在另一个关于“如此”的回答中放弃表格的原因。首先,我这样做了,还删除了migrations文件夹
./manage.py sqlclear reviewer | ./manage.py dbshell
./manage.py syncdb
然后是
python manage.py migrate
,接着是python manage.py sqlmigrate reviewer 0001
,然后是python manage.py runserver
,它起了作用。其他类似的问题对解决问题没有帮助。它们似乎有点不同。你为什么要创建自己的主键字段而不是仅仅使用django自动生成的主键字段呢?@domino我需要使用post_id来连续获取记录。一旦我处理完某个页面上的一条记录,该页面就会重定向到下一条记录。我想我可以把它设为主键,这样我就不需要使用unique,只需要少一个字段。Django会自动为您创建一个主键字段,它完全符合您的意图。您不需要自己创建一个。@domino得到了它id=models.AutoField(primary\u key=True)
Django会自动完成
./manage.py sqlclear reviewer | ./manage.py dbshell
./manage.py syncdb