【发布时间】:2016-11-10 16:44:07
【问题描述】:
如何定义OneToOne与同一个Model的关系?
我有一个名为Order 的模型,它可以与另一个模型Order 配对。现在我试图弄清楚如何处理这种关系的模型。
我的想法:
class Order(models.Model):
paired_order = models.OneToOneField(self)
或者:
class Pairing(models.Model):
order1 = models.ForeignKey(Order, related_name='pairing')
order2 = models.ForeignKey(Order, related_name='pairing')
你怎么看?哪个更有效率?
我想简单地调用配对的。所以我会做这样的事情:
order.paired_order
或者:
order.pairing.paired
我希望这种关系是对称的,所以对于每一对订单我都调用相同的东西并得到成对的订单。
配对模型将是一个很好的解决方案,因为我可以为这种关系添加额外的信息,但是有一个问题是我必须检测它是哪个顺序,所以我不能打电话给order.pairing.order1,因为我没有知道我是否没有调用相同的命令。
编辑:
>>> from _app import models
>>> order1 = models.Order(flight_number="xxx")
>>> order2 = models.Order(flight_number="yyy", paired_order=order1)
>>> order1.paired_order.flight_number
返回None object has not ....
问题是,当我将 order1 设置为 order2 的配对订单时,我想要相反方向的相同东西。所以order1.paired_order = order2 也这样做order2.paired_order = order1。
【问题讨论】:
-
你在这里问什么?如何定义关系或哪个更好?
-
为什么它与任何其他一对一关系的工作方式不同?您应该尝试使用这些重复项中的任何一个
标签: python django django-models