如何定义OneToOne相同的关系Model?
我有一个名为 的模型Order,可以与另一个模型配对Order。现在我正在尝试找出如何处理这种关系的模型。
我的想法:
class Order(models.Model):
paired_order = models.OneToOneField(self)
Run Code Online (Sandbox Code Playgroud)
或者:
class Pairing(models.Model):
order1 = models.ForeignKey(Order, related_name='pairing')
order2 = models.ForeignKey(Order, related_name='pairing')
Run Code Online (Sandbox Code Playgroud)
你怎么认为?哪个更有效率?
我想要简单地调用配对的。所以我会做类似的事情:
order.paired_order
Run Code Online (Sandbox Code Playgroud)
或者:
order.pairing.paired
Run Code Online (Sandbox Code Playgroud)
我希望这种关系是对称的,因此对于每对订单,我将其称为相同的事物并获得配对订单。
配对模型将是一个很好的解决方案,因为我可以向这种关系添加额外的信息,但是有一个问题是我必须检测它是哪个顺序,所以我无法调用,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
Run Code Online (Sandbox Code Playgroud)
退货None object has not ....
问题是,当我将 order1 设置为 order2 的配对订单时,我想要相反方向的相同内容。所以order1.paired_order = order2也这样做吧order2.paired_order = order1。