Метод класса к классу Django ORM Model

В проекте Django у меня есть следующие модели:

class Asset(Model):
    code = SlugField(max_length=DEFAULT_CODE_LENGTH, unique=True)
    name = CharField(max_length=DEFAULT_NAME_LENGTH)

    class Meta:
        abstract = True


class District(Asset):
    # ... class-specific fields

Я хотел бы добавить некоторую логику, чтобы при инстанцировании подкласса Asset автоматически заполнялось поле code. Я подумал, что элегантным способом сделать это может быть модификация класса Asset:

class Asset(Model):
    @classmethod
    def generate_code(cls) -> str:
        return unique_code_generation_logic(model=cls, length=DEFAULT_CODE_LENGTH)

    code = SlugField(max_length=DEFAULT_CODE_LENGTH, unique=True, default=generate_code)
    name = CharField(max_length=DEFAULT_NAME_LENGTH)

    class Meta:
        abstract = True

def unique_code_generation_logic(model: type, length: int) -> str:
    # generating a new code and verifying that is unique for the model class
    return code

Но Django не позволяет объявить его, потому что метод класса не может быть сериализован:

Так как же это можно сделать?

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