我的 django 项目使用 django-helpdesk 应用程序。
这个应用程序有 Ticket
模型。
我的应用程序有一个 Client
模型,它应该与 ticket 具有一对多关系 - 例如,我可以列出与特定客户端有关的所有 ticket。
通常我会将 models.ForeignKey(Client)
添加到 Ticket
但它是一个外部应用程序,我不想修改它( future 更新问题等)。
我对 ManyToMany
或 OneToOne
没有任何问题,但不知道如何使用 ManyToOne
(许多来自外部应用程序的票证从我的应用程序到一个客户)
最佳答案
更 hacky 的解决方案:您可以在 Client
类之后的模块级代码中执行以下操作:
class Client(models.Model):
...
client = models.ForeignKey(Client, related_name='tickets')
client.contribute_to_class(Ticket, name='client')
我还没有完全测试它(我没有做任何实际的数据库迁移),但是正确的描述符(ReverseSingleRelatedObjectDescriptor
for Ticket
和 ForeignRelatedObjectsDescriptor
for Client
) 被添加到类中,South 识别新字段。到目前为止,它似乎像普通的 ForeignKey
一样工作。
编辑:实际上甚至没有那么hacky。这正是 Django 跨类设置外键的方式。它只是在构建反向相关类时通过添加字段来反转过程。如果任一模型上的任何原始字段被遮蔽,它都不会引发错误。只要确保你不这样做,因为它可能会破坏你的代码。除此之外,我认为应该没有任何问题。
关于python - 如何在django中从外部应用程序添加与模型的多对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989689/