Django外键排序/位置

时间:2013-02-11 15:13:56

标签: django model

我有一个Django模型中的项目列表,我希望能够设置它的顺序。基本上是一个链表。

class List(models.Model):
      name = models.CharField(max_length=255)

class Item(models.Model):
      list     = models.ForeignKey(List)
      position = models.PositiveIntegerField()
      data     = models.AnyField() 

      class Meta:
            unique_together = ('list', 'position')
            ordering = ['position']

这是我想到的模型。对于List中的每个ListItem,列表位置必须是唯一的,但也必须没有间隙(例如,删除第4项不会产生位置序列[1,2,3,5,6]。

1 个答案:

答案 0 :(得分:2)

在写这个问题时,我偶然发现了possible solution

class Item(models.Model):
    list = models.ForeignKey(List)
     # ...

    class Meta:
        order_with_respect_to = 'list'

然后可以这样操作这个模型:

list = List.objects.get(id=1)
list.get_item_order() == [1, 2, 3]

可以通过传入Item主键列表来设置List对象的相关Item对象的顺序:

list.set_item_order([3, 1, 2])

没有尝试过此代码,请随时纠正我(评论或编辑)。