Python 在Django中相互引用的两个外键

Python 在Django中相互引用的两个外键,python,django,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):

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

我能用吗

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)
我不知道让两个外键相互引用是否是一种不好的做法。

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

这里没有“更好”的解决方案,这取决于您的具体规格和需求,但一般来说,模型越简单越好。如果保证“当前”状态始终是最后一个状态(您可能希望在
状态中创建
时间戳
模型FWIW),那么您不需要
顺序。当前状态
FK甚至
都不是当前标志

另外,如果您选择的是
Order.current_state
FK,则必须将其设置为可空,否则将出现鸡和蛋的问题


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

我喜欢从上次创建的状态对象获取当前状态的想法。但是如果我想按状态过滤所有订单呢。我可以在我的订单模型
def get_current_state():return self.states.latest()
中创建一个函数,但当它不是数据库中的字段时,我不知道如何在查询集中使用它。我无法执行排序.objects.filter(获取当前状态类型=1)