我正在使用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文档我找到了另一种方法将方法附加到用户类,从User创建代理模型。请查看this page中的“扩展现有用户模型”一节。 因此,这是我创建的新代理模型:
class UserPatch(User):
def my_method(self):
# do something...
class Meta:
proxy = True
现在我的方法应该附加到用户类,但我找不到访问它的方法。我会执行类似User.my_method()
的操作,但当然不可能,因为my_method()
实际上并不是用户类的方法。
我确信可以从父模型中获取子模型实例,如下所示:
Person的实例也可以通过MyPerson访问,并且 反之亦然
你知道如何让这个工作吗?
答案 0 :(得分:0)
让我猜一下。您想从request.user?
访问子模型的方法Person的实例也可以通过MyPerson访问,并且 反之亦然
这有点混乱。查看代理模型文档。那反过来'仅适用于实例数据(字段及其内容),但不适用于子模型的方法。 要从request.user实例访问此类方法,您应该使用上述here
所述的方法定义自定义用户模型