【问题标题】:Django does not create ImageField on PostgresDjango 不在 Postgres 上创建 ImageField
【发布时间】:2017-06-28 16:19:42
【问题描述】:

我在models.py 中添加了一个新的 ImageField:

class User(AbstractUser):
    [more_fields_here]
    profile_picture = models.ImageField(upload_to='profile_pictures', null=True)

我运行python manage.py makemigrations,然后运行python manage.py migrate,没有任何错误。

但是当我运行我的应用程序时,我得到:

ProgrammingError at column authentication_user.profile_picture does not exist

我检查了 Postgres 数据库,但 profile_picture 列不存在。

我删除了迁移并再次尝试,但仍然遇到同样的错误。

migrations/0001_initial.py 中有一行:

('profile_picture', models.ImageField(null=True, upload_to='profile_pictures')),

但是为什么表中列存在呢?

【问题讨论】:

  • 您是否手动修改了迁移文件?我怀疑 Django 认为 0001_initial 已经迁移,这就是它不添加此字段的原因。我还建议尝试python manage.py migrate appname zero 回滚所有迁移,然后再次运行python manage.py migrate
  • 您是否将AUTH_USER_MODEL 设置为您的自定义用户模型?您看到数据库中的[more_fields_here] 字段了吗?
  • @Chris,我可以确认我已经设置了AUTH_USER_MODEL。所有其他字段都按预期在数据库中。问题只出在这个字段上。
  • manage.py sqlmigrate <app_name> 0001 是否包含用于创建列的 SQL?
  • @Kamil,您可以添加您的评论作为答案,以便可能有类似问题的其他人可以更仔细地找到它。

标签: django postgresql django-models


【解决方案1】:

好像是迁移出了问题,不建议手动修改迁移文件。 Django 存储已应用迁移的信息,如果您修改已应用的0001 迁移并再次运行migrate,则不会应用这些修改。当然我不知道这到底是不是发生在你身上,但看起来profile_picture 字段是在应用0001 之后添加的。

解决此问题的最简单方法(无需回滚任何迁移):

  1. 0001迁移中删除字段profile_picture
  2. 再次运行makemigrations0002 应创建新字段profile_picture
  3. 运行migrate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 2013-11-06
    • 1970-01-01
    相关资源
    最近更新 更多