尝试进行迁移时获得“以下内容类型已过时,需要删除”。这是啥意思,我该如何解决?
Posted
技术标签:
【中文标题】尝试进行迁移时获得“以下内容类型已过时,需要删除”。这是啥意思,我该如何解决?【英文标题】:Getting a "The following content types are stale and need to be deleted" when trying to do a migrate. What does this mean, and how can I solve it?尝试进行迁移时获得“以下内容类型已过时,需要删除”。这是什么意思,我该如何解决? 【发布时间】:2016-03-07 13:31:35 【问题描述】:这是我的models.py:
class Notification(models.Model):
user = models.ForeignKey(User)
createdAt = models.DateTimeField(auto_now_add=True, blank=True)
read = models.BooleanField(default=False, blank=True)
class Meta:
abstract = True
class RegularNotification(Notification):
message = models.CharField(max_length=150)
link = models.CharField(max_length=100)
class FNotification(Notification):
# same as Notification
pass
当我做python manage.py makemigrations
时,它是这样说的:
Migrations for 'CApp':
0019_auto_20151202_2228.py:
- Create model RegularNotification
- Create model FNotification
- Remove field user from notification
- Add field f_request to userextended
- Delete model Notification
首先,它说Remove field user from notification
很奇怪,因为user
仍然在我的Notiication
模型中(所以如果有人能弄清楚为什么它说它说'从通知中删除字段用户',那就是太棒了!)但是,当我继续前进并尝试做python manage.py migrate
时,我收到了这条消息:
Applying CMApp.0019_auto_20151202_2228... OK
The following content types are stale and need to be deleted:
CApp | notification
Any objects related to these content types by a foreign key will also
be deleted. Are you sure you want to delete these content types?
If you're unsure, answer 'no'.
Type 'yes' to continue, or 'no' to cancel: no
我输入了no
。但这究竟是什么意思,为什么我会收到此消息,以及如何使我不需要此消息?
【问题讨论】:
我得到这个是因为我忘记拉取存储库的最后一次提交。我最新的本地迁移不是存储库中最新的。 :P 我提取了远程代码,再次执行了迁移,我的工作就像一个魅力。 【参考方案1】:当您移除/删除模型并进行迁移时会触发您收到的消息。
在大多数情况下,您可以安全地删除它们。但是,在某些情况下,这可能会导致数据丢失。如果其他模型对删除的模型有外键,这些对象也将被删除。
Here's the django ticket that requests to make deleting stale content types safer.
编辑
正如@x-yuri 指出的那样,这张票已被修复并已在Django 1.11 发布。
【讨论】:
哦,所以因为我在Notification
模型中添加了Abstract=True
,这可能是Django 假设我删除它的原因。知道为什么它说- Remove field user from notification
吗?因为user
ForeignKey还在,那为什么Django会说去掉呢?
我对此并不完全确定。也许您可以添加迁移文件,以便我们检查发生了什么。
@RodXavier 在我的情况下,我有一个模型 A 已使用模型 B、C 的外键删除。这意味着通过迁移,模型 B、C 中的数据将被删除或仅当模型 A 有外键时?谢谢
@Pietro,如果删除表 A 中的陈旧数据,模型 B、C 中的数据不会被删除。
工单中的问题已修复,更改(加上some more)已在Django 1.11 中发布。以上是关于尝试进行迁移时获得“以下内容类型已过时,需要删除”。这是啥意思,我该如何解决?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用Force.com迁移工具(ANT)进行部署时,我做错了什么
我会在从 v3 迁移到最新 v7 的迁移 lucene 索引中获得性能改进吗
使用迁移到 Worklight 6.3 的现有 6.0.2 代码连接到本地时未在 Worklight 6.3 中获得更新