1

我有一个 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]。

4

1 回答 1

2

在写这个问题时,我偶然发现了一个可能的解决方案

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]

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

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

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

于 2013-02-11T15:13:56.173 回答