在Django中,如何通过代理模型正确访问相关的代理模型

时间:2010-07-22 15:16:55

标签: django django-models

我想从auth应用程序覆盖Django用户和组模型中的get_absolute_url方法。

我的第一个想法是定义一个代理模型,但后来我注意到usuario.groups中的元素是Group而不是Grupo的实例,而grupo.user_set中的元素也是如此{1}}案例。所以我稍微扩展了代理模型

class Usuario(User):
    class Meta:
        proxy = True

    @models.permalink
    def get_absolute_url(self):
        return ('ver_usuario', [self.id])

    @property
    def grupos(self):
        return Grupo.objects.filter(user=self.pk)

    @grupos.setter
    def grupos(self, valor):
        self.groups = valor


class Grupo(Group):
    class Meta:
        proxy = True

    @models.permalink
    def get_absolute_url(self):
        return ('ver_grupo', [self.id])

    @property
    def usuarios(self):
        return Usuario.objects.filter(groups=self.pk)

    @usuarios.setter
    def usuarios(self, valor):
        self.user_set = valor

但后来我发现RelatedManager方法grupo.usuarios.create(username='test_usuario')会创建用户,但不会将其与群组相关联,因为grupo.user_setManyRelatedManager grupo.usuariosQuerySet。所以也许创建一个特殊的ManyRelatedManager ......但是在这一点上我觉得这种情况越来越不可能复杂。

由于我想要替换get_absolute_url,我只需在模板中使用url标记即可。但我想知道,如果我想添加其他方法,我该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您可以使用ABSOLUTE_URL_OVERIDES设置在每个安装上覆盖get_absolute_url