Django:模型名称冲突


问题内容

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

我尝试使用:

    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参数。

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

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


问题答案:

问题在于,Satchmo和Pinax都具有一个Contact模型,该模型具有用户的ForeignKey。Django尝试为每个这些ForeignKeys向User添加一个“
contact_set”反向关系属性,因此会发生冲突。

解决方案是在Pinax的Contact模型中或类似地在Satchmo Contact模型中,将诸如related_name =“
pinax_contact_set”之类的内容添加为ForeignKey的参数。这将需要直接编辑其中一个的源。您可能可以找到通过monkeypatching做到这一点的方法,但是我希望这很棘手。