Я разрабатываю приложение в 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
У вас есть идеи, как заставить это работать?
Спасибо pythonpro. Однако я выбрал другое решение, используя сеанс пользователя, который содержит информацию пользователя. Таким образом, я получил некоторые преимущества для своего приложения. –