我想從auth應用中覆蓋Django用戶和組模型中的get_absolute_url方法。在Django中,如何通過代理模型正確訪問相關的代理模型
我的第一個想法是定義一個代理模式,但後來我發現,在usuario.groups
的要素是的Group
代替Grupo
情況下,它也發生在grupo.user_set
情況相同。所以,我擴大了代理模式有點
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
標記。但我想知道,如果我想添加其他方法,我該怎麼做?
不好意思,用你的母語編寫代碼真是個壞主意。你似乎很熟練掌握英語,所以在今天的通用語言中保留你的代碼是一個很好的習慣。 – gruszczy 2010-07-22 15:35:23
那麼,這個項目是本地的,只能在西班牙語環境中使用,並由西班牙人進行審查,所以我認爲使用西班牙語名稱是可取的。在這個例子中,我會在代碼示例中翻譯變量名稱,但是知道它們的含義似乎很簡單。 – naw 2010-07-22 15:45:49