Sat 3 May 2008
В транк добавлен бранч Queryset-refactor, который позволяет легко наследовать модели Django, об этом уже давно всем известно. Но наследование - не единственная альтернатива, можно применять Monkey patching.
Главная идея в том, что Monkey patching также позволяет добавлять не только поля, но и функции.
Например, так для модели User добавляю поле OpenID, и еще дополнительную функцию, возвращающую ник, если имя не задано
не создаются дополнительные таблицы
работа с моделью осуществляется всеми стандартными средствами Django.
Главная идея в том, что Monkey patching также позволяет добавлять не только поля, но и функции.
Например, так для модели User добавляю поле OpenID, и еще дополнительную функцию, возвращающую ник, если имя не задано
from django.contrib.auth.models import User
User.add_to_class('openid', models.CharField(max_length=250,blank=True))
def get_user_name(self):
if self.first_name or self.last_name:
return self.first_name + " " + self.last_name
return self.username
User.add_to_class("get_user_name",get_user_name)
Явные плюсы метода:не создаются дополнительные таблицы
работа с моделью осуществляется всеми стандартными средствами Django.
English
Deutsch
Русский
