Django模型字段:外键有序列表

时间:2015-07-24 03:15:30

标签: django django-models django-orm

我有一个Route模型,它应该存储沿该路线的有序停靠列表。我应该如何建立这种关系?

class Stop(models.Model):
    name = ..
    latitude = ..
    longitude = ..

class Route(models.Model):
    stops_list = # Ordered list of stops on the route

1 个答案:

答案 0 :(得分:2)

由于路线上有许多停靠点,并且停靠点可能属于多条路线,因此我会使用ManyToMany来存储此关系。您可以指定through模型来存储关系的数据,例如路线预计到达此站的时间。添加订单信息有很多选项。一种天真的方式是拥有如下的整数订单字段,或者您可以通过arrival_time存储订单隐含。如果这些路由不经常更改,IntegerField并不是一个糟糕的实现。但是,如果它们经常更改,那么您需要更新字段....不理想。

class Stop(models.Model):
    name = ..
    latitude = ..
    longitude = ..

class Route(models.Model):
    stops_list = models.ManytoManyField(Stop, through='StopInfo') # Ordered list of stops on the route

class StopInfo(models.Model):
    """ Model for storing data about the Stop/Route relationship """
    stop = models.ForeignKey(Stop)
    route = models.ForeignKey(Route)
    arrival_time = models.DateTimeField(auto_now_add=True)
    order = models.PositiveIntegerField()