【问题标题】:Why Django doesn't see change when I add/remove a field from my models?为什么在我从模型中添加/删除字段时 Django 看不到变化?
【发布时间】:2022-11-19 21:45:28
【问题描述】:

我从模型中删除了 ForeignKey,我猜迁移没有正确应用。那是三天前,从那时起就应用了其他迁移。

问题是现在我无法重新创建相同的ForeignKey,因为当我重新创建该字段时,Django 看不到models.py 中的更改。

解决此问题的最佳方法是什么?

class Account(TimestampedModel):
    name = models.CharField(max_length=50, null=True)


# python manage.py makemigrations
No changes detected

当我重新创建该字段时,它一直说未检测到任何变化。

class Account(TimestampedModel):
    name = models.CharField(max_length=50, null=True)
    exchange = models.ForeignKey(Exchange, on_delete=models.CASCADE, related_name='account', null=True)  # ForeignKey I cant recreate


# python manage.py makemigrations
No changes detected

我试图在调用makemigrations 时指定应用程序的名称,但没有帮助。

【问题讨论】:

  • 关于 Django 的“想法”,您究竟是如何得出结论的?你在做什么,(意想不到的)结果是什么?
  • 你好,我添加了一个例子来澄清这个问题。
  • 尝试注释模型并再次运行迁移,然后取消注释,然后再次运行迁移。希望这会奏效!
  • 您能否向我们展示此模型的当前迁移(即迁移文件)?
  • @9769953 不幸的是很难发布多个文件的内容;我所做的是删除所有迁移文件,再次调用makemigrations,然后调用migrate --FAKED

标签: python django


【解决方案1】:

我终于找到了自己问题的答案。这个问题是由一个与我想重新创建的字段同名的方法引起的,并且使用@property。我必须删除此属性才能进行迁移。

【讨论】:

    【解决方案2】:

    您可以尝试删除所有迁移文件并删除数据库(例如 sqlite 文件)。之后运行干净的 sqlmigrations+migrate。确保每个迁移文件夹都有 __init__.py 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 2012-01-05
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多