我有一个订单模型。我想跟踪每个订单的当前状态以及它已经过的状态。
我可以使用
吗?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)
我不知道让两个外键相互引用是不好的做法。
答案 0 :(得分:0)
这些不是“互相引用的两个外键” - 这并不意味着什么 - 而是“两个相互引用的模型”。
这里没有“更好”的解决方案,取决于您的确切规格和需求,但作为一般规则,您的模型越简单越好。如果保证“当前”状态始终是最后一个(您可能希望在created_on
模型FWIW中有State
个时间戳,那么您不需要Order.current_state
FK甚至is_current
标志。
另外,如果你选择Order.current_state
FK,你必须让它可以为空,否则你会有鸡蛋问题......
哦,是的:这绝对不是Django或Python问题,而是关系模型设计问题。