有没有办法清理/重新校准表的ID号?编辑和删除某些对象后,我的ID中存在空白。
ex:1,2,3,4,5,6,7,8,21,22,23,24,25,29,30,31...
Django只会在最高ID之后逐步添加新项目,并且差距会导致问题。我正在使用Postregsql。
答案 0 :(得分:1)
第一种方法:
您可以创建新的模型字段item_number
。然后,“手动”保留这个新字段:
item_number
计算为表item_number
的最大值。请记住,此操作可能会导致锁定。 也许,最轻松的方法是:
def save(self, *args, **kwargs):
if not self.pk:
self.item_number = Entry.objects.latest('item_number') + 1 if
Entry.objects.exists() else 0
super(Model, self).save(*args, **kwargs)
item_numer
grather而不是删除的所有模型进行重新计算。这是一个示例:
def delete(self, *args, **kwargs):
super(Model, self).save(*args, **kwargs)
myModel.objecte.filter( item_number__gt = self.item_number).update(
item_number=F('item_number') - 1 )
这两种方法都可能导致表中的大锁。请记住,需要进行原子操作,您应该使用transactions。