2

我写了这个:

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 值,这些值无法更改。

4

2 回答 2

1

看来来自Django Positions的 PositionField可以做到这一点,并且目前正在与Django CrowdSourcing 一起使用。这不完全是我所要求的,但似乎它可能是一个很好的、可用的解决方案。

于 2013-05-07T13:57:03.320 回答
0

抱歉,如果我很迟钝,但是 django 内置的AutoField并不能满足您的需求。

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

sort_field = models.AutoField()

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

于 2013-03-06T18:38:54.333 回答