从父实例调用代理子模型中的方法

时间:2014-10-22 08:47:39

标签: django python-2.7 django-models

我正在使用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访问,并且   反之亦然

     

引用表单this documentation

你知道如何让这个工作吗?

1 个答案:

答案 0 :(得分:0)

让我猜一下。您想从request.user?

访问子模型的方法
  

Person的实例也可以通过MyPerson访问,并且   反之亦然

这有点混乱。查看代理模型文档。那反过来'仅适用于实例数据(字段及其内容),但不适用于子模型的方法。 要从request.user实例访问此类方法,您应该使用上述here

所述的方法定义自定义用户模型