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 に答える