Да я имею, главным образом чтобы сделать некоторые вещи, которые напоминают ввод утки, когда я обертывал API прежней версии в более современный интерфейс C++.
Это зависит от того, что вы пытаетесь добавить в модель. Если вы хотите добавить дополнительную информацию о пользователе, обычно рекомендуется использовать метод UserProfile
: http://docs.djangoproject.com/en/dev/topics/auth/ #storing-additional-information-about-users
Однако, если вы просто хотите добавить собственные методы или менеджеры в модель User
, я бы сказал, что более логично использовать модель прокси, например Итак:
from django.contrib.auth.models import User
class UserMethods(User):
def custom_method(self):
pass
class Meta:
proxy=True
Прокси-модель будет работать с той же таблицей базы данных, что и исходная модель, поэтому идеально подходит для создания пользовательских методов без физического расширения модели. Просто замените любые ссылки на пользователя
в ваших представлениях на UserMethods
. (И, конечно же, вы можете использовать это в инструменте администратора, отменив регистрацию модели User
и зарегистрировав вместо нее свою модель прокси.)
Любые экземпляры исходной модели User
, которые созданы будут мгновенно доступны через модель UserMethods
, и наоборот. Подробнее здесь: http://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models
(NB. Для моделей прокси требуется Django 1.1 и выше)
Да. Не нужно возиться с основами, если к вашей пользовательской модели прикреплена функция .get_profile ().
Я предпочитаю использовать один и тот же UserProfile в различных проектах, которые я разрабатываю, и расширяю User для любых нужд конкретного проекта. Таким образом, общие функции передаются в UserProfile, а функции для конкретного проекта - в пользовательские User. У меня еще не было никаких побочных эффектов от наличия подкласса модели User, интересно, есть ли еще какие-то с Django 1.0 +.