如何获得在Django模型

问题描述:

自动递增排序顺序我写了这个:如何获得在Django模型

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值,那些不能更改。

+0

看看这个帖子:http://*.com/questions/883575/custom-ordering-in-django它可以帮助你 – karthikr 2013-03-06 18:16:30

+0

@Carl Meyer的答案就是指向这种领域,只是没有详细说明一个更好的方法来提出sort_order。 – boatcoder 2013-03-06 21:06:38

看起来Django Positions的PositionField会这样做,目前正在使用Django CrowdSourcing。这不是我所要求的,但似乎它可能是一个很好的,可用的解决方案。

对不起,如果我是钝的,但不django的内置AutoField做你要找的。

我知道你不想惹主键,但你可以创建另一个AutoField

sort_field = models.AutoField() 

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

+0

根据代码:“一个模型不能有多个AutoField。”所以,如果你有一个id字段,你不能有一个sort_order字段。我想你可以让sort_order成为主键,但如果你是通过可能改变的ID进行删除的话,会导致各种奇怪的行为。 – boatcoder 2013-03-06 21:03:05

+0

对不起,我的坏,我应该在发布我的答案之前检查过它。我在这里找到了关于多个自动字段实现的更多信息 - https://code.djangoproject.com/ticket/8576 – 2013-03-06 22:33:29