我有一个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]。
答案 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])
没有尝试过此代码,请随时纠正我(评论或编辑)。