如何在djang中添加与外部应用模型的多对一关系

2024-04-25 17:51:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我的django项目使用django帮助台应用程序。 此应用程序具有Ticket模型。在

我的应用程序有一个Client模型,它应该与ticket有一对多的关系,所以我可以列出与特定客户端相关的所有票据。在

通常我会将models.ForeignKey(Client)添加到Ticket 但这是一个外部应用程序,我不想修改它(将来的更新问题等等)。在

我对ManyToManyOneToOne没有问题,但不知道如何使用ManyToOne(从外部应用程序到我的应用程序的一个客户端有很多票证)


Tags: 项目django模型client应用程序客户端关系models
2条回答

更为老套的解决方案:您可以在Client类之后在模块级代码中执行以下操作:

class Client(models.Model):
    ...

client = models.ForeignKey(Client, related_name='tickets')
client.contribute_to_class(Ticket, name='client')

我还没有完全测试它(我没有进行任何实际的数据库迁移),但是正确的描述符(ReverseSingleRelatedObjectDescriptor用于Ticket和{}用于{})被添加到类中,South识别新字段。到目前为止,它似乎像一个普通的ForeignKey一样工作。在

编辑:事实上,甚至没有那么老套。这正是Django跨类设置外键的方式。它只是通过在构建反向相关类时添加字段来反转过程。如果两个模型上的任何原始字段都被隐藏,则不会引发错误。只要确保你没有这样做,因为它可能会破坏你的代码。除此之外,我认为不应该有任何问题。在

至少有两种方法可以实现:

更优雅的解决方案:使用一个与Ticket有一对一关系的TicketProfile类,并将Client外键放入其中。在

Hacky solution:使用多对多关系,手动编辑自动创建的表并使ticket_id唯一。在

相关问题 更多 >