Django - размер ArrayField на основе значения поля связанной модели - PullRequest
0 голосов
/ 03 августа 2020

У меня есть 2 модели: Отчет и STO с отношением один-ко-многим между ними, поэтому у STO может быть много связанных отчетов.

Модель STO

class STO(TerminableWithTerminableRelatedModel):
    name = models.CharField(_('name'), unique=True, blank=False, max_length=255)
    description = models.TextField(_('description'), blank=True, null=True)
    answer_no = models.PositiveSmallIntegerField(_('number of answers'), default=5) # that's the value I'm interested in
    result_note = models.TextField(_('STO result note'), blank=True, null=True)

Модель отчета

class Report(models.Model):

    @property
    def answer_no(self):
        return STO.objects.get(id=self.STO).answer_no

    date = models.DateField(_('date'), blank=False, null=False)
    STO = models.ForeignKey(STO, on_delete=models.CASCADE, related_name='reports')
    answers = ArrayField(AnswerField(), size=answer_no, blank=False, null=False) # here comes the problem

Как видите, каждый отчет имеет массив AnswerField ( AnswerField - это настраиваемое поле, я пропустил его, потому что он выходит за рамки этого вопроса). размер этого массива должен быть указан в соответствующем классе STO в поле answer_no . Я принял это решение, потому что это значение равно для каждого отчета данного STO, поэтому вставка этого значения в каждый отдельный отчет приведет к дублированию данных. Я пытался добиться этого, используя свойство , но Django жалуется, что он не может сериализовать свойства при выполнении миграции:

ValueError: Cannot serialize: <property object at 0x7faf02161ea0>
There are some values Django cannot serialize into migration files.
...