Django max_length другого атрибута модели

#python #django #django-models #maxlength

#python #django #django-модели #максимальная длина

Вопрос:

Я хочу, чтобы целочисленное значение одного атрибута модели было максимальной длиной другого атрибута модели, как указано ниже «емкость = модели.Целочисленное поле(max_length=Concerthall.capacity)».

 class Concerthall(models.Model):
    name = models.TextField(max_length=254)
    capacity = models.IntegerField()
    employees = models.IntegerField()

    def __str__(self):
    return self.name

class Events(models.Model):
    name = models.TextField(max_length=254)
    capacity = models.IntegerField(max_length=Concethall.capacity)
    timeFrom = models.DateTimeField()
    timeTo = models.DateTimeField()
    concerthallName = models.ForeignKey(Concerthall, on_delete=models.PROTECT, null=True)
  

Возможно, он также работает с валидаторами, но я искал несколько часов и не смог найти никакого решения для этого.

Комментарии:

1. IntergerField не имеет атрибута max_length

2. Я не понимаю, чего вы пытаетесь достичь. Не могли бы вы добавить лучшее объяснение?

3. Зачем вам это делать, если вы всегда можете получить доступ к емкости зала с помощью my_event.concerthallName.capacity ? Зачем вам нужно сохранять емкость дважды?

4. Извините за плохое объяснение. Суть в том, что вместимость концертного зала статична, например, 400 человек. Но емкость определенного события — нет. Это может быть 350 или 200, но определенно не более 400.

Ответ №1:

Я предлагаю другой подход, выполняя проверку в методе models clean() :

 class Events(models.Model):
    name = models.TextField(max_length=254)
    capacity = models.IntegerField(default=0)
    timeFrom = models.DateTimeField()
    timeTo = models.DateTimeField()
    concert_hall = models.ForeignKey(Concerthall, on_delete=models.PROTECT)

    def clean(self):
        if self.capacity > self.concert_hall.capacity:
            raise ValidationError(
                'the capacity of the event cannot exceed the capacity of the hall')