Django:模型名称冲突
我正在我的项目中尝试使用不同的开源应用程序。问题是,有两个不同的应用程序使用了相同的模型名称,并且它们各自的模型定义也不同。
我尝试使用:
class Meta:
db_table = "db_name"
但是没有成功。我在同步数据库时仍然遇到字段名称冲突的错误。有没有什么建议?
更新
其实我是在尝试将 Satchmo 和 Pinax 集成在一起。错误信息是:
错误:一个或多个模型没有通过验证:
contact.contact:字段 'user' 的访问器与相关的多对多字段 'User.contact_set' 冲突。请在 'user' 的定义中添加一个 related_name 参数。
friends.contact:多对多字段 'users' 的访问器与相关字段 'User.contact_set' 冲突。请在 'users' 的定义中添加一个 related_name 参数。
你说得对,表名已经是唯一的。我分析了一下模型,发现模型 'Contact' 在两个不同应用程序的两个模型中都有。当我注释掉其中一个模型时,程序就正常工作了。
可能错误的原因是这两个应用程序都在 PYTHON_PATH 中,当另一个应用程序定义了相同名称的模型时,就会发生冲突。
1 个回答
问题在于,Satchmo和Pinax都有一个联系模型(Contact model),这个模型里面有一个指向用户(User)的外键(ForeignKey)。Django会试图为每个外键在用户模型中添加一个叫“contact_set”的反向关系属性,这就导致了冲突。
解决办法是在Pinax的联系模型的外键中添加类似于related_name="pinax_contact_set"的参数,Satchmo的联系模型也是类似的。这就需要直接修改其中一个的源代码。你也许可以通过一种叫做猴子补丁(monkeypatching)的方法来实现,但我觉得这会比较复杂。