Установка значения по умолчанию 0 в IntegerField не работает

В моем проекте Django пользователь вставляет значения элементов от 1 до 5.

Я пытаюсь сложить их вместе, поэтому сначала я получил ошибку:

unsupported operand type(s) for +: 'int' and 'NoneType'

поэтому я добавил значение по умолчанию для каждого IntegerField равное 0, но все равно получаю ту же ошибку.

Мой вопрос, как я могу добавить эти классы в Model, избегая этой ошибки.

class Info(models.Model):
    item_1_amount= models.IntegerField(default=0, null=True, blank=True, verbose_name='Item 1 Amount')

    item_2_amount= models.IntegerField(default=0, null=True, blank=True, verbose_name='Item 2 Amount')

    item_3_amount= models.IntegerField(default=0, null=True, blank=True, verbose_name='Item 3 Amount')

    item_4_amount= models.IntegerField(default=0, null=True, blank=True, verbose_name='Item 4 Amount')

    item_5_amount= models.IntegerField(default=0, null=True, blank=True, verbose_name='Item 5 Amount')

    total_assets= models.IntegerField(null=True, blank=True, verbose_name='Total Assets')

    @property
    def get_total_assets(self):
        return int(self.item_1_amount) + int(self.item_2_amount) + int(self.item_3_amount) + int(self.item_4_amount) + int(self.item_5_amount)

    # @property
    # def get_total_assets(self):
    #     return self.item_1_amount + self.item_2_amount + self.item_3_amount + self.item_4_amount + self.item_5_amount

    def save(self, *args, **kwargs):
        self.total_assets = self.get_total_assets
        super(Info, self).save(*args, **kwargs)

Вы можете воспользоваться or 0, чтобы использовать 0 в случае None (или нуля):

@property
def get_total_assets(self):
    return (self.item_1_amount or 0) + (self.item_2_amount or 0) + (self.item_3_amount or 0) + (self.item_4_amount or 0) + (self.item_5_amount or 0)

Установка default=0 не будет работать для существующих записей. Кроме того, использование нескольких столбцов с одинаковым "измерением" (здесь суммы) часто не является хорошей идеей. Возможно, лучше сделать модель Amount с привязкой ForeignKey к модели Info. В этом случае вы можете связать ноль, один или более Amount с Info моделью.

Вернуться на верх