Sov*_*iut 22 django django-models django-authentication
我想为模型添加一个方便/模型方法django.contrib.auth.models.User.这样做的最佳做法是什么,因为上次我检查时,扩展用户模型被认为是不好的做法.
我有一个单独的自定义UserProfile模型.我是否应该将其用于所有与用户相关的便利方法?
Gar*_*ers 30
这取决于您要添加到模型中的内容.如果要添加有关用户的更多信息,通常建议您使用以下UserProfile方法:http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
但是,如果您只想将自定义方法或管理器添加到User模型中,我会说使用代理模型更合乎逻辑,如下所示:
from django.contrib.auth.models import User
class UserMethods(User):
def custom_method(self):
pass
class Meta:
proxy=True
Run Code Online (Sandbox Code Playgroud)
代理模型将在与原始模型相同的数据库表上运行,因此非常适合创建自定义方法而无需物理扩展模型.只需将User视图中的任何引用替换为UserMethods.(当然,您可以通过取消注册User模型并注册代理模型来在管理工具中使用它.)
User创建的原始模型的任何实例都可以通过UserMethods模型立即访问,反之亦然.更多信息:http://docs.djangoproject.com/en/dev/topics/db/models/#proxy-models
(NB.代理模型需要Django 1.1及以上版本)
suh*_*lvs 14
如果要向User模型添加自定义方法,我建议使用monkey_patching:
monkey_patching.py在你的任何一个中创建一个文件apps::
#app/monkey_patching.py
from django.contrib.auth.models import User
def get_user_name(self):
if self.first_name or self.last_name:
return self.first_name + " " + self.last_name
return self.username
User.add_to_class("get_user_name",get_user_name)
Run Code Online (Sandbox Code Playgroud)
并将其导入应用程序的__init__.py文件中.即::
#app/__init__.py
import monkey_patching
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6479 次 |
| 最近记录: |