Django:Syncdb 错误地警告多对多字段已过时

Posted

技术标签:

【中文标题】Django:Syncdb 错误地警告多对多字段已过时【英文标题】:Django : Syncdb incorrectly warns that many-to-many field is stale 【发布时间】:2011-07-27 12:28:27 【问题描述】:

我有一个 django 应用程序,其中一个应用程序与 UserProfile 具有多对多关系。但是每当我执行同步数据库时,它都会警告我 app_users 是陈旧的字段

The following content types are stale and need to be deleted:
     Apps | app_users

#settings.py
AUTH_PROFILE_MODULE = 'kprofile.UserProfile'

#Apps/models.py
class app(models.Model):
    ....
    users = models.ManyToManyField(UserProfile)

现在我不在视图内使用 UserProfile,除了规则内的一些身份验证目的。 UserProfile 只能从管理界面附加到应用程序。如何阻止 django syncdb 给我这个错误/不正确的警告?

【问题讨论】:

【参考方案1】:

注意消息。这并不是说你的领域是陈旧的——它是在谈论 Content Types 模型中的一个条目。

在 shell 中,这样做:

from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.get(app_label='Apps', model='app_users')
ct.delete()

【讨论】:

听从您的命令并打印 ct。 ct => 。我认为这是一个有效的关系。 与是否有效无关。该 CT 不再指向正确的位置。删除它并运行syncdb,它将正确地重新创建它。 我深吸了一口气(我直接在生产服务器上工作)并在提示符下输入“是”。显然一切仍在正常工作。感谢您的澄清。 如果您需要不抛出异常的静默语句:ContentType.objects.filter(app_label='Apps', model='app_users').delete()

以上是关于Django:Syncdb 错误地警告多对多字段已过时的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 django rest 框架保存多对多字段对象

如何解决具有多对多关系的石墨烯 django 节点字段

Django:对象需要具有字段“...”的值才能使用这种多对多关系

是否可以通过检查它们的交集是否为空来过滤 django 多对多 QuerySet 字段?

在 django 中查询多对多字段会产生一个空查询集

我们如何在 django 管理搜索字段中搜索多对多字段