如何更改现有类中的方法

时间:2013-09-24 16:41:04

标签: python django

我想做以下事情:

  • 我想在User django.auth类中更改get_absolute_url方法。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

如果您使用的是Django 1.5或更高版本,则可以在custom User model课程中重新定义get_absolute_url实例方法。

在1.5之前,实现此目的的唯一干净方法是创建自己的proxy model代替django.contrib.auth.models.User,使用get_aboslute_url实例方法构建绝对网址不要遵循/users/%username%/模式。

答案 1 :(得分:2)

如果Django User类可以满足您的需求,您可以扩展它。来自Django.Contrib.Auth文档:

  

扩展Django的默认用户

     

如果您对Django的用户模型完全满意并且您只想添加一些其他配置文件信息,则可以简单地继承django.contrib.auth.models.AbstractUser并添加您的自定义配置文件字段。此类提供默认用户的完整实现作为抽象模型。

例如:

from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):

    def get_absolute_url(self):
        return '/somepath/user/%s/' % urlquote(self.username)

答案 2 :(得分:0)

如果是get_absolute_url,您可以使用ABSOLUTE_URL_OVERRIDES setting

覆盖此方法
ABSOLUTE_URL_OVERRIDES = {
    'auth.user': lambda user: "/users/%s/" % user.username,
}

覆盖其他方法需要使用Django 1.5中引入的可交换用户。