在models.py中更改属性的数据类型后,Django迁移未应用于Postgres。

问题描述 投票:0回答:1
我有这个模型,其中price是一个整数字段。我确实进行了迁移,一切都很好。

from django.db import models class Bill(models.Model): price= models.IntegerField()

然后由于需求更改,我不得不将price字段设置为JSONField,它将基于类似于此的某些键来存储price

price={"actual_price":100, "tax_price":20}

我对模型进行了如下更改:

from django.db import models class Bill(models.Model): price= JSONField(blank=True, null=True)

我执行了makemigrations和迁移操作,这些迁移未反映在数据库中。也没有错误。当我的代码尝试从数据库读取时,出现错误“列:价格不存在”。

我通过参考StackOverflow其他问题尝试了以下事情:

    已删除该字段。运行迁移,将其应用。移除现场工作精细。但是当我重新添加字段而不是将其视为新字段时要添加的字段,只是不会被插入。
  1. 从migrations.py文件夹中删除迁移,重新运行它并重新应用它。
  2. 请注意:

    我正在使用Postgres DB。相同的方法适用于Django内部提供的SQLite DB,但不适用于Postgres。
  1. 丢失数据是不可行的选择,因为数据库数据是生产服务器的数据。
  2. 我尝试通过使用查询ALTER Table ADD Column的PostGres添加列
  3. manually
  4. ,效果很好。这是我最后使用的钩子。在应用更新的迁移之前,某些记录中存在初始整数字段中的数据。奇怪的是,如果我想覆盖数据,Django也没有要求我设置值。
  5. 我需要Django迁移才能自动将更改应用到工作。由于此问题,仅添加新列和修改列的数据类型根本不起作用(Rest操作(如删除列)有效。

我有这个模型,其中价格是一个整数字段。我确实进行了迁移,一切都很好。从django.db导入模型类Bill(models.Model):price = models.IntegerField()然后由于...

python django postgresql django-models django-migrations
1个回答
1
投票
由于没有其他选择,也没有提供解决方案,因此我不得不将我的应用程序指向PostGres中的新数据库,然后它开始正常工作。未来的经验教训:
© www.soinside.com 2019 - 2024. All rights reserved.