我有一张表,比方说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中这样做吗?示例代码非常感谢。谢谢你提前。
答案 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