如何在Django模型中获得自动递增排序顺序

时间:2013-03-06 18:02:18

标签: django django-models

我写了这个:

class Department(models.Model):
    ...
    sort_order = models.IntegerField(help_text="Leave negative to place at end", default=-1)

    def save(self, *args, **kwargs):
        """ Set the sort order (if unset) to larger than the largest value"""
        if self.sort_order <= 0:
            largest = Department.objects.all().aggregate(x = models.Max('sort_order'))['x'] or 0
            self.sort_order = largest + 10
        super(Department, self).save(*args, **kwargs)

但我并不以此为荣。有一个更好的方法吗?我可以将它滚动到一个字段中,但不知道如果我在那里重构代码,我将如何回到模型表。我不能使用自动增量列,因为作为FK值,无法更改。

2 个答案:

答案 0 :(得分:1)

来自Django Positions的PositionField似乎已执行此操作,目前正在使用Django CrowdSourcing。这不是我要求的,但似乎它可能是一个好的,可用的解决方案。

答案 1 :(得分:0)

很抱歉,如果我是钝的,但不是django的内置AutoField做你正在寻找的。

我知道您不想弄乱主键,但您可以创建另一个AutoField

sort_field = models.AutoField()

也许你可以看一下覆盖AutoField来做你想做的事。