【发布时间】:2020-05-25 22:59:08
【问题描述】:
我已经创建了一个 Django 应用程序,并且我有一个这样的模型:
class Company(models.Model):
name = models.TextField(max_length = 200)
当我运行 python3 manage.py makemigrations appname 时,一切都按预期运行,并为该类创建了一个迁移文件。
如果模型中的类也定义了Meta 类,就会出现问题:
class Company(models.Model):
name = models.TextField(max_length = 200)
class Meta:
app_label = "Companies"
现在,如果我运行 makemigrations 命令,我会收到“未检测到更改”消息,并且不会生成迁移文件:
> python3 manage.py makemigrations myApp
No changes detected in app 'appname'
或者,更糟糕的是,如果具有 Meta 类的模型没有依赖项(外键),则会创建一个迁移,该迁移将完全删除模型/表。
或者,如果存在依赖项(来自另一个模型的外键引用),我会收到如下错误:
matcher.OtherTable.foreignkeyref: (fields.E300) Field defines a relation with model 'Company', which is either not installed, or is abstract.
定义了Meta 类的所有模型都不会生成迁移,无论是初始迁移还是由于某种原因的任何后续迁移。事后添加了 Meta 的类将在下一次迁移时被删除。就好像它们根本不存在一样。
我在 Mac OS 10.15.5 上使用 Python 3.8.3 和 Django 3.0.6。
【问题讨论】:
-
好吧,你指定了一个不同的
app_label,那么tit 应该是python3 manage.py makemigrations Companies,但更改app_label的情况很少见。
标签: python django django-3.0