私はこれを書きました:
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 値として変更できないため、使用できません。