首页 > 解决方案 > 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...

我不明白,当然,这个专栏不存在。

这就是迁移的目的,不是吗?

标签: pythondjango

解决方案


这些错误通常是因为您需要为新字段包含一个默认的空值,并且允许它是nullable,它应该很简单:

class Points(models.Model):

     user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, default=None)
     ...

原因是迁移应用于数据库中的现有记录以及所有未来记录。迁移需要知道如何在数据库中为现有记录填充新字段(列)...


推荐阅读