Крюк в поле назначения Django - PullRequest
4 голосов
/ 03 апреля 2012

При создании «ванильного» класса Python, если кто-то хочет выполнить код при присвоении атрибута, обычный шаблон для создания «защищенного» (начального-подчеркивания) атрибута для хранения данных и использования propertyдля создания геттеров и сеттеров.

Теперь, если бы я хотел сделать это с моделью Django, это было бы непривлекательно, не в последнюю очередь потому, что мне пришлось бы искать версию свойства подчеркивания.

Каков рекомендуемый способ запуска кода при назначении полей в Django?

Нет сигнала, который я могу найти, чтобы сделать это;единственный другой подход, который я вижу, состоит в том, чтобы использовать пользовательское поле, которое может зарегистрировать дополнительные обработчики получения / установки.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Похоже, что грязные поля - это то, что вы хотите.Вы не можете перехватить в одно и то же время, когда значение установлено, но вы можете подключиться перед сохранением.http://code.activestate.com/pypm/django-dirtyfields/

В качестве альтернативы вы должны настроить @properties с помощью заданных методов.Конечно, это потребует от вас дублирования ваших фактических django.db.models.fields полей с геттерами и сеттерами.

1 голос
/ 03 апреля 2012

Вы просто не можете сделать это с нестандартным полем, потому что нет фактического «поля»: это простой атрибут, без класса за ним.

Вам необходимо определитькласс настраиваемого поля и переопределение to_python - не забудьте установить метакласс на SubfieldBase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...