Всем привет.
Я зарание прошу прощения за все =D
Теперь к делу. При всей красивости модельного уровня в Django, он мне доставил не мало батхердов и гемороя. Всем понятны возможности наследования в Python. С Mixin в Django проблем нет, но вот с базовыми (абстрактными, на java монер) классами первый костыль: указать в классе мета, что это абстрактный класс. Ок. Наследуемся от базового класса, но нам чтото в нем не нравится, мы хотим это переопределить - фиг. Ошибка миграции, ошибка валидации - не помню, но думаю не я первый с ней столкнулся. Возникает желание как то это формировать на лету, на основе metaclass, как сами разработчики джанго делают. С полями модели вроде удается, правда приходится вставлять костыль в метакласс, чтобы проверял не базовый ли это класс(вспоминаем, что метакласс наследуется, более того, и к предкам он тоже применяется, а Django не любит, когда вы переопределяете поля). Вот другой косяк: обычные переменные, не поля. К примеру: PUBLISHED_FIELD_IS_NEEDED = True по умолчанию в базовом классе. Но нам это поле нафиг не сдалось, переопределим этот флаг в наследнике. И о5 25: ошибки нет, но при миграции поле создается, потому что South почемуто формирует список полей и переменных, на основе абстрактного класса, не взирая на переопределения в наследнике. Или я не знаю чей это косяк, может не South, а Django. Кто как решал данный вопрос?