2014-10-22 4 views
0

Я разрабатываю приложение в Django (python framework, v1.7).Метод вызова в дочерней модели прокси из родительского экземпляра

Мне нужно «добавить» метод к модели пользователя django, так что, когда я экземпляр пользователя (например, вход в систему), я могу вызвать этот метод и получить результаты непосредственно в объекте пользователя, который только что появился.

Я использовал трюк вызова «обезьяна-зашивки», который работает следующим образом:

def my_method(self): 

    # do something... 

# Appending method to User class 
User.add_to_class("my_method", my_method) 

Чтобы сделать эту работу, я импортировал файл, содержащий код, указанный выше в __init__.py, расположенной в той же папке __settings.py. Таким образом, при запуске сервера мой метод будет импортирован и добавлен в класс пользователя.

К сожалению, я обнаружил некоторые проблемы, когда мне нужно выполнять запросы или другие операции с помощью терминала (или скриптов) и не использовать Django Admin. Отладка кода, я понял, что это проблема импорта.

Просмотр документации Django Я нашел еще один способ добавить метод к классу пользователя, создав прокси-модуль от пользователя. Посмотрите на пункт «Расширение существующей модели пользователя» в this page. В результате, это новый прокси-модель я создал:

class UserPatch(User): 

    def my_method(self): 

     # do something... 

    class Meta: 
     proxy = True 

Теперь мой метод должен быть добавлен к классу пользователя, но я не могу найти способ, чтобы получить доступ к нему. Я бы выполнил что-то вроде User.my_method(), но, разумеется, не возможно, так как my_method() на самом деле не является методом класса User.

Я уверен, что это возможно, чтобы получить экземпляр ребенка модели из родительской модели, как указано здесь:

экземпляры лица также будут доступны через MyPerson и наоборот

Форма запроса this documentation

У вас есть идеи, как заставить это работать?

ответ

0

Позвольте мне угадать. Вы хотели получить доступ к методу дочерней модели из request.user?

экземпляры лица также будут доступны через MyPerson и наоборот

Это немного баловаться заявление. Просмотрите документацию прокси-моделей. Это «наоборот» истинно только для данных (полей и их содержимого), но не для методов дочерней модели. Чтобы получить доступ к таким методам из экземпляра request.user, вы должны определить свою пользовательскую модель с этими методами, как описано here

+0

Спасибо pythonpro. Однако я выбрал другое решение, используя сеанс пользователя, который содержит информацию пользователя. Таким образом, я получил некоторые преимущества для своего приложения. –

Смежные вопросы