#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')