我正在使用Django,我通过以下方式导入用户模型:
from django.contrib.auth.models import User, Group, Permission
但现在我想在User
模型类中添加一些类方法。
所以这是我的一般问题:我们可以在定义类之后添加类方法吗?
例如:
class A:
value = 123
def myfunc(self):
return self.value
我希望myfunc成为A类的成员函数,它怎么样? Plz帮助。
答案 0 :(得分:0)
您可以通过分配添加类方法,如user2357112建议的那样。
class A(object):
value = 123
def myfunc(cls):
return cls.value
A.myfunc = classmethod(myfunc)
print A.myfunc()
> 123
对于Django模型,您可能希望使用自定义Manager
来处理所有用户的功能,而不是类方法。但如果没有进一步的信息,我就不能说更多。
答案 1 :(得分:0)
因为你在谈论Django User
模型,you should create your own model, extending the User
。要做到这一点, 你只需要创建一个与 ,您应该通过扩展OneToOne
模型User
关系的模型:AbstractUser
:
from django.contrib.auth.models import AbstractUser
class MyUserModel(AbstractUser):
# AbstractUser has already every fields needed: username, password, is_active...
def myfunc(self):
# Just a dummy working example
return "My Username in uppercase: %s" % self.username.upper()
将AUTH_USER_MODEL = "yourapp.MyUserModel"
放入settings.py
然后,您可以像使用User
一样使用此新用户模型:它的方法与User
相同(例如create_user
,check_password
... ),您可以使用myfunc
访问user.myfunc()
,其中user
是常规MyUserModel
实例(来自request.user
或ORM)。这与框架组织更加一致,并允许您根据需要向User
添加更多字段。
旁注:正如@Daniel Roseman在评论中指出的那样,你应该really extend the AbstractUser
model now(自Django 1.6开始)而不是制作UserProfile&#34;代理&#34;。< / p>
相关问题:
答案 2 :(得分:0)
配置文件很好,它会工作,没有问题。 Django ORM中实际意味着的一个选项是代理模型。在代理模型中,您可以拥有父模型的所有字段,并添加自定义方法或管理器,而无需更改父模型。
from django.contrib.auth.models import User
class MyUser(User):
class Meta:
proxy = True
def my_method(self):
return self.name