Django: 模型名称冲突

4

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

我尝试使用:

    class Meta:
        db_table = "db_name"

但是它没有起作用。 我在syncdb时仍然遇到字段名称冲突错误。 有什么建议。

更新

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

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

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

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

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

也许错误是由于两个应用程序都在PYTHON_PATH中,并且当其他应用程序使用相同名称定义其模型时发生冲突。


2
应用程序的标签不同,应该可以减少冲突的风险。您能否提供有关错误的更多详细信息? - Antti Rasinen
1
是的,数据库表按照“<应用程序名称>_<模型名称>”的模式命名,因此冲突不太可能发生。至少在PostgreSQL上是这样的。请提供更多详细信息,例如同步失败运行的实际输出。 - Ber
您是否将应用程序包含了两次?除了实际的错误信息外,请在settings.py文件中发布INSTALLED_APPS设置。 - S.Lott
请粘贴错误信息。也有可能是由于多个ForeignKey指向同一模型而导致的related_name冲突。 - Carl Meyer
1个回答

6
问题在于Satchmo和Pinax都有一个与用户(User)有ForeignKey关联的Contact模型。Django试图为每个ForeignKey向User添加一个"contact_set"反向关系属性,因此会产生冲突。
解决方案是在Pinax的Contact模型中添加类似related_name="pinax_contact_set"的参数,或者在Satchmo Contact模型中类似地添加。这将要求直接编辑其中一个源代码。您可能能够通过猴子补丁来找到一种方法,但我预计这会很棘手。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接