我想使用以下方法将数据从Django模型保存到PostgreSQL数据库中:
mymodel.objects.create(title='test')
此模型仅具有标题和ID,但会引发此错误:
django.db.utils.IntegrityError:“ id”列中的空值违反了非空约束
我该如何解决?为什么没有自动设置id?
答案 0 :(得分:1)
您应该允许Django创建id作为主键,而不是将其显式地放入模型中。如果需要将其作为单独的字段,则可以使用其他名称,例如mymodel_id。
示例:
class Book(models.Model):
title = models.CharField(null=False, blank=False)
def __str__(self):
return str(self.id)
运行之后:
python manage.py makemigrations
python manage.py migrate
如果您需要将Django与现有数据库集成,可以尝试以下操作:Integrating Django with an existing database
答案 1 :(得分:1)
如果您以某种方式在数据库级别更改了ID归档,并且想要再次使其成为自动递增序列,请执行
在下面的示例中,检查名为mytable的示例下面的示例中Postgres中的mymodel的表
Pick a starting value for the serial, greater than any existing value in the table
SELECT MAX(id)+1 FROM mytable
Create a sequence for the serial (tablename_columnname_seq is a good name)
CREATE SEQUENCE test_id_seq MINVALUE 3 (assuming you want to start at 3)
Alter the default of the column to use the sequence
ALTER TABLE test ALTER id SET DEFAULT nextval('test_id_seq')
Alter the sequence to be owned by the table/column;
ALTER SEQUENCE test_id_seq OWNED BY test.id