Метод класса к классу 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 не позволяет объявить его, потому что метод класса не может быть сериализован:
Так как же это можно сделать?