【问题标题】:Django: Model name clashDjango:模型名称冲突
【发布时间】:2010-11-05 09:49:48
【问题描述】:

我正在尝试在我的项目中使用不同的开源应用程序。问题是两个不同的应用程序使用相同的模型名称,并具有自己的模型定义。

我尝试使用:

    class Meta:
        db_table = "db_name"

但它没有工作。我仍然在 syncdb 收到字段名称冲突错误。任何建议。

更新

我实际上是在尝试将 Satchmo 与 Pinax 集成。错误是:

错误:一个或多个模型未验证:

contact.contact:字段“user”的访问器与相关的 m2m 字段“User.contact_set”发生冲突。为 'user' 的定义添加一个 related_name 参数。

friends.contact:m2m 字段“用户”的访问器与相关字段 User.contact_set 发生冲突。在“用户”的定义中添加一个 related_name 参数。

你是对的,表名已经是唯一的。我分析了模型,模型“联系人”在两个不同应用程序的两个模型中。当我注释掉其中一个模型时,它工作正常。

可能存在错误,因为两个应用程序都在 PYTHON_PATH 中,并且当其他应用程序使用相同名称定义其模型时,就会发生冲突。

【问题讨论】:

  • 当然,不同应用的应用标签应该可以降低冲突的风险。您能否提供有关该错误的更多详细信息?
  • 是的,数据库表由模式“_”命名,因此不太可能发生冲突。至少那是我在 PostgreSQL 上看到的。请提供更多数据,例如失败的syncdb运行的实际输出
  • 您是否两次包含该应用程序?除了实际的错误消息,请从您的 settings.py 中发布 INSTALLED_APPS 设置。
  • 请粘贴错误。由于多个 ForeignKeys 指向同一模型,您实际得到的也可能是相关名称冲突。

标签: python django django-models


【解决方案1】:

问题在于 Satchmo 和 Pinax 都有一个 Contact 模型,其中包含一个外键到用户。 Django 尝试为每个 ForeignKeys 添加一个“contact_set”反向关系属性给 User,所以会有冲突。

解决方案是在 Pinax 的 Contact 模型中添加类似 related_name="pinax_contact_set" 作为参数,或在 Satchmo Contact 模型中类似地添加。这将需要直接为一个或另一个编辑源。您也许可以通过猴子补丁找到一种方法,但我认为这很棘手。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 2023-03-11
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2014-12-22
    • 2020-06-18
    • 2011-08-21
    相关资源
    最近更新 更多