我想从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_set
是ManyRelatedManager
grupo.usuarios
是QuerySet
。所以也许创建一个特殊的ManyRelatedManager
......但是在这一点上我觉得这种情况越来越不可能复杂。
由于我想要替换get_absolute_url
,我只需在模板中使用url
标记即可。但我想知道,如果我想添加其他方法,我该怎么做呢?