python - “city_id”列中的空值违反非空约束
问题描述
当我尝试使用 Django admin 在数据库中添加新条目时,会发生此错误。即使我尝试添加新状态,此错误也会显示。我的模型有什么问题?
class City(models.Model):
city_id = models.AutoField(primary_key=True)
city = models.CharField(max_length=100, blank=True, null=True)
state = models.ForeignKey('State', models.DO_NOTHING, blank=True, null=True)
class Meta:
managed = False
db_table = 'city'
def __str__(self):
return self.city
class State(models.Model):
state_id = models.AutoField(primary_key=True)
state = models.CharField(max_length = 10, blank=True, null=True)
class Meta:
managed = False
db_table = 'state'
def __str__(self):
return self.state
解决方案
刚刚发现问题:这是我的 PostgreSQL 数据库的问题。即使我INSERT
在数据库中运行,也会显示此错误。所以问题是因为 myPRIMARY KEY
不是一个SERIAL
值,而是一个INTEGER
,因此当我插入一个新值时它不能自动递增。
要解决这个问题:
- 删除旧的整数 id 以及它上面的所有外键约束。
ALTER TABLE city ADD COLUMN city_id SERIAL PRIMARY KEY
- 用新的外键重新连接表
之后,我的问题就解决了。希望这可以帮助其他面临类似问题的人!
推荐阅读
- java - 使用 SimpleCommandLinePropertySource 提取属性在 Java 中不起作用
- reactjs - React Hooks:当只有 props.children 值发生变化时,如何防止重新渲染整个组件?
- javascript - 使用 pushState 将查询参数附加到 url 的末尾
- python - 如何在不使用 sorted 函数的情况下对字典进行排序?
- angular - 角度地理哈希意外令牌导出
- python - 在 pandas SQL 查询中使用日期范围 where 子句返回一个空数据框
- php - 此路由不支持 POST 方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。在添加字段时
- f# - 为什么我在 F# 的匹配语句中收到“未使用值”警告
- python - 为什么我收到 ModuleNotFoundError: No module named 'pyperclip'?
- sql - 如何在具有 WHERE 子句的 SQL 中查找最大列值?