Django用户模型,添加功能

Hel*_*nar 28 django django-models django-users

我想在Django的默认用户模型中添加一个新函数,用于检索模型类型的相关列表.

这样的Foo模型:

class Foo(models.Model):
    owner = models.ForeignKey(User, related_name="owner")
    likes = models.ForeignKey(User, related_name="likes")
Run Code Online (Sandbox Code Playgroud)

........

    #at some view
    user = request.user
    foos= user.get_related_foo_models()
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标?

Lak*_*sad 43

你可以添加一个方法 User

from django.contrib import auth
auth.models.User.add_to_class('get_related_foo_models', get_related_foo_models)
Run Code Online (Sandbox Code Playgroud)

确保您在models.py或其他一些在django启动时导入的文件中包含此代码.

  • 我很确定这是猴子补丁通常是不赞成的.请参阅此处的讨论:http://stackoverflow.com/a/965859/406157 (6认同)

suh*_*lvs 12

这是@Lakshman Prasad的答案的更新.但是一个完整的例子:

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)