python - Django,试图向现有模型添加一个字段引发错误
问题描述
我有一个包含以下模型的 Django REST 框架 API:
class Points(models.Model):
mission_name = models.CharField(name='MissionName',
unique=True,
max_length=255,
blank=False,
help_text="Enter the mission's name"
)
latitude = models.FloatField(name="GDT1Latitude",
unique=False, max_length=255, blank=False,
help_text="Enter the location's Latitude, first when extracting from Google Maps.",
default=DEFAULT_VALUE)
longitude = models.FloatField(name="GDT1Longitude",
unique=False, max_length=255, blank=False,
help_text="Enter the location's Longitude, second when extracting from Google Maps.",
default=DEFAULT_VALUE)
添加用户字段:
class Points(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
# rest of fields...
我添加了一个用户字段,当尝试进行迁移并迁移它时,我收到以下错误:
django.db.utils.ProgrammingError: column find_second_gdt_points.user does not exist
LINE 1: SELECT "find_second_gdt_points"."id", "find_second_gdt_point...
我不明白,当然,这个专栏不存在。
这就是迁移的目的,不是吗?
解决方案
这些错误通常是因为您需要为新字段包含一个默认的空值,并且允许它是nullable
,它应该很简单:
class Points(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, default=None)
...
原因是迁移应用于数据库中的现有记录以及所有未来记录。迁移需要知道如何在数据库中为现有记录填充新字段(列)...
推荐阅读
- javascript - 在 JS 中解析多级 JSON
- java - 添加失败:stat /var/lib/docker/tmp/docker-builder673702145/target/xxx.jar:没有这样的文件或目录
- php - 如何以正确的方式使用 distinct
- android - 从服务调用时活动重新启动
- php - Mysql 2跨表视图不与1 = 1关系成一个视图
- shell - 未从入口点脚本正确获取 Env 文件
- c# - 查找列表中仅出现一次的项目
- symfony - 从 symfony 控制器中找不到对 curl_init 的调用,但从命令中可以正常工作
- java - 如何将下面显示的结果转换为 ListView?
- assembly - 使用 rdtsc 对英特尔进行汇编程序基准测试给出了奇怪的答案,为什么?