Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django runserver因Django.db.utils.IntegrityError失败:非空约束失败:审阅者\u post.post\u id(自动字段)_Python_Django_Sqlite - Fatal编程技术网

Python Django runserver因Django.db.utils.IntegrityError失败:非空约束失败:审阅者\u post.post\u id(自动字段)

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

这是我的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文件,它使用以下代码将记录添加到数据库中。我使用了
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 id
django.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