Django模型列表订单字段更新

时间:2016-12-08 06:21:34

标签: python django django-models

我有一张表,比方说Book,其中包含以下模型定义:

class Book(models.Model):
    name = models.CharField('name of the book', max_length=10)
    sequence = models.IntegerField('The order for the book')

我需要按Book字段显示sequence列表顺序,如下所示,序列值为1,2,3等......

Book.objects.all().order_by('sequence')

但是我在视图中创建/更新图书实例时遇到了困难。我不太确定在插入新书模型或更新现有书籍时如何re-sequence现有书籍。

假设我已经在数据库中有三本书了,让我们说:

BookA, sequence = 1
BookB, sequence = 2
BookC, sequence = 3

当我插入名为 BookD 的新序列 1 时,我需要更新现有的序列值,为数据库中已有的每本书分配一个新的序列值。我的预期结果是:

BookD, sequence = 1
BookA, sequence = 2
BookB, sequence = 3
BookC, sequence = 4

所以有人知道如何在django中这样做吗?示例代码非常感谢。谢谢你提前。

1 个答案:

答案 0 :(得分:2)

您可以先过滤序列号大于序列号的所有书籍,然后将这些书籍的序号增加1.然后保存新书:

<script src="http://ideone.com/e.js/lkp3wR" type="text/javascript" ></script>

如果已创建books = Book.objects.filter(sequence__gte=bookD.sequence) books.update(sequence=F('sequence')+1) bookD.save() ,则您可以在更新bookD之前将其排除:

sequence