Модели 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)