В транк добавлен бранч Queryset-refactor, который позволяет легко наследовать модели Django, об этом уже давно всем известно. Но наследование - не единственная альтернатива, можно применять Monkey patching.
Главная идея в том, что 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.

6 Votes | Average: 5 out of 56 Votes | Average: 5 out of 56 Votes | Average: 5 out of 56 Votes | Average: 5 out of 56 Votes | Average: 5 out of 5 (6 votes, average: 5 out of 5)
Loading ... Loading ...

Top Posts: