Вычисление значения поля на основе PK в Django

avatar
Aiden
8 августа 2021 в 23:59
41
0
0

Цель: Установить customer_number на расчетное значение b_country + id + 10000.

models.py

class Customer(models.Model):

    id = models.BigAutoField(primary_key=True)
    customer_number = models.CharField("Customer #", max_length=10, default=0)
    b_country = models.TextField("Country", max_length=2, choices=COUNTRY_OPTIONS)

    @property
    def get_customer_number(self):
        a = self.b_country
        b = (self.id + 10000)
        return a + str(b)

    def save(self, *args, **kwarg):
        self.customer_number = self.get_customer_number
        super(Customer, self).save(*args, **kwarg)

Проблема: при отправке формы для создания нового клиента (новой записи) я получаю следующую ошибку:

a 'CA'
self Ошибка форматирования: TypeError: неподдерживаемые типы операндов для +: 'NoneType' и 'int'>

Когда у меня уже есть запись (обновление и существующая информация о клиенте), код работает нормально. Насколько я понимаю, он не может получить id, так как он все еще проверяет данные перед отправкой в ​​модель, поэтому Customer.id для этого экземпляра не вытягивается.

Вопрос: существует ли более чистый способ установки customer_number на основе ПК?

Источник
Brian Destura
9 августа 2021 в 01:03
0

Да, если вам нужен идентификатор, вы должны сначала сохранить его

Aiden
9 августа 2021 в 02:46
0

@bdbd Как мне закодировать форму или функцию для сохранения, а затем запустить def save(), который я прикрепил к классу?

Ответы (0)