Модели Django: какое поле использовать для позиции/порядка объекта

Мой проект - это базовая доска scrum с моделью Column, экземпляров которой может быть неограниченное количество. Каждый столбец отображается рядом, и я хочу, чтобы порядок столбцов можно было настраивать. Я думал использовать IntegerField для определения числовой позиции, но я не могу понять, как установить max_value равным общему количеству столбцов, поскольку оно варьируется в зависимости от доски.

Вот как я его установил:

class Column(models.Model):
    name = models.CharField(max_length=25)
    board = models.ForeignKey(Board, on_delete=models.CASCADE)
    position = models.IntegerField(unique=True,min_value=1, max_value=???)

Моя проблема заключалась в том, что использовать в качестве max_value. Я попытался решить ее следующим образом:

class Column(models.Model):
    
    max_value = Column.objects.get(board=board).count()

    name = models.CharField(max_length=25)
    position = models.IntegerField(unique=True,min_value=1, max_value=max_value)

Я знаю, что это, очевидно, не сработает. Могу ли я как-то использовать class Meta для установки ограничений вместо этого, или что было бы хорошим способом подойти к этому?

Возможно, вы могли бы переопределить save() метод.

class Column(models.Model):
    name = models.CharField(max_length=25)
    board = models.ForeignKey(Board, on_delete=models.CASCADE)
    position = models.IntegerField(unique=True, min_value=1)
    
    def save(self, **kwargs):
        position_max_value = type(self).objects.get(board=self.board).count()
        if self.position > position_max_value:
            raise ValueError(...)
        super().save(**kwargs)
Вернуться на верх