Постоянное Поколение. Детали являются, конечно, конкретной реализацией.
Кратко, это содержит объекты Java, связанные с классами и интернированными строками. В клиентской реализации Sun с совместным использованием на, classes.jsa
с отображенной памятью для формирования исходных данных, с приблизительно наполовину только для чтения и половина копии на записи.
объекты Java, которые просто стары, сохранены в Штатном Поколении.
Рефакторинг моделей - довольно дорогая вещь:
Поэтому я думаю, что обновление списка уникальных имен полей в мета-классе модели - наименьшая проблема для вас. о чем следует беспокоиться.
ИЗМЕНИТЬ : Если вы действительно хотите сделать это и все ваши поля должны быть «уникальными вместе», то человек в freenode прав, и вам придется написать собственный метакласс. Это довольно сложно и подвержено ошибкам, а также может сделать ваш код несовместимым с будущими выпусками Django.
«Магия» Django ORM управляется метаклассом ModelBase
( django.db.models.base.ModelBase
) универсального базового класса Model
. Этот класс отвечает за то, чтобы взять определение вашего класса со всеми полями и метаинформацией и создать класс, который вы будете использовать в своем коде позже.
Вот рецепт того, как вы могли бы достичь своей цели:
ModelBase
для использования вашего собственного метакласса. __ new __ (cls, name, base, dict)
dict
, чтобы собрать Meta
member ( dict ["Meta"]
), а также все элементы поля meta.unique_to together
на основе имен собранных вами полей. ModelBase. __new __
) __ metaclass__ = MyMetaclass
(или создайте абстрактный базовый класс, расширяющий Модель
и переопределяющий метакласс)