如何获得在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值,那些不能更改。
对不起,如果我是钝的,但不django的内置AutoField做你要找的。
我知道你不想惹主键,但你可以创建另一个AutoField
。
sort_field = models.AutoField()
也许你可以看看覆盖AutoField做你想做的事。
根据代码:“一个模型不能有多个AutoField。”所以,如果你有一个id字段,你不能有一个sort_order字段。我想你可以让sort_order成为主键,但如果你是通过可能改变的ID进行删除的话,会导致各种奇怪的行为。 – boatcoder 2013-03-06 21:03:05
对不起,我的坏,我应该在发布我的答案之前检查过它。我在这里找到了关于多个自动字段实现的更多信息 - https://code.djangoproject.com/ticket/8576 – 2013-03-06 22:33:29
看看这个帖子:http://*.com/questions/883575/custom-ordering-in-django它可以帮助你 – karthikr 2013-03-06 18:16:30
@Carl Meyer的答案就是指向这种领域,只是没有详细说明一个更好的方法来提出sort_order。 – boatcoder 2013-03-06 21:06:38