Я добавляю slug ко всем моим моделям для целей сериализации, поэтому я определил абстрактный базовый класс, который использует AutoSlugField из django_autoslug.
class SluggerModel(models.Model):
slug = AutoSlugField(unique=True, db_index=False)
class Meta:
abstract=True
У меня также есть настраиваемый менеджер и определенный метод natural_key, и на данный момент у меня есть около 20 дочерних классов, поэтому есть несколько вещей, которые делают использование абстрактной базовой модели стоящей, помимо единственной строки, которая определяет поле.
Однако я хочу иметь возможность переключать несколько аргументов по умолчанию для инициализации AutoSlugField
для некоторых дочерних моделей, при этом все еще имея возможность использовать абстрактный базовый класс. Например, я хотел бы, чтобы некоторые из них использовали параметр populate_from
, определяя поля из своей конкретной модели, а другие - db_index=True
вместо моего значения по умолчанию (False
).
Я начал делать это с помощью настраиваемого Metaclass, используя пользовательские параметры, определенные в каждом дочернем классе Meta класса, но это становится крысиным гнездом. Я открыт для руководства по этому подходу или любых других предложений.