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

Цель: Установить 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, основанный на PK?

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