两个外键在Django中相互引用

时间:2015-06-03 12:30:45

标签: python django

我有一个订单模型。我想跟踪每个订单的当前状态以及它已经过的状态。

我可以使用

吗?
class Order(models.Model):
    current_state = models.ForeignKey('State')

class State(models.Model):
    order = models.ForeignKey(Order)

或使用

更好
class Order(models.Model):
    pass

class State(models.Model):
    order = models.ForeignKey(Order)
    is_current = models.BooleanField(default=True)

我不知道让两个外键相互引用是不好的做法。

1 个答案:

答案 0 :(得分:0)

这些不是“互相引用的两个外键” - 这并不意味着什么 - 而是“两个相互引用的模型”。

这里没有“更好”的解决方案,取决于您的确切规格和需求,但作为一般规则,您的模型越简单越好。如果保证“当前”状态始终是最后一个(您可能希望在created_on模型FWIW中有State个时间戳,那么您不需要Order.current_state FK甚至is_current标志。

另外,如果你选择Order.current_state FK,你必须让它可以为空,否则你会有鸡蛋问题......

哦,是的:这绝对不是Django或Python问题,而是关系模型设计问题。