python - 如何猴子补丁Django?

标签 python django django-models monkeypatching

我发现了这个 post关于猴子修补 Django:

from django.contrib.auth.models import User

User.add_to_class('openid', models.CharField(max_length=250,blank=True))

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)

我知道这并不理想,最好通过单独的模型 ProfileUser 添加字段和函数。

话虽如此,我只想了解这是如何工作的:

  1. 我应该把猴子补丁代码放在哪里?

  2. 代码什么时候运行——只运行一次?每个 Python 解释器启动一次?每个请求一次?

  3. 大概我仍然需要更改数据库架构。因此,如果我删除表 User 并运行 ./manage.py syncdbsyncdb 会“知道”一个新字段已添加到用户?如果不是,我该如何更改架构?

最佳答案

将文件 monkey_patching.py 放入您的任何 apps 并将其导入到应用程序的 __init__.py 文件中。即:

app/monkey_patching.py

#app/monkey_patching.py
from django.contrib.auth.models import User

User.add_to_class('openid', models.CharField(max_length=250,blank=True))

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)

app/__init__.py

#app/__init__.py
import monkey_patching

关于python - 如何猴子补丁Django?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720858/

相关文章:

python - 从 Django 服务器一次流式传输多个文件

python - 修复应用级别允许的并发 session 数的方法。 Django

python - 可以打印或检查有多少数据库连接请求打开以及是否关闭? Django

django - 在 Django 应用程序中排除被阻止用户提出的问题的最有效方法

python - 运行时错误 : main thread is not in main loop

python - 如果某些列有交集,如何将行从一张纸复制到另一张纸

python - Django ModelForm的插入表单也显示已有记录

python - 直接在你的 Django 应用程序中访问 ._meta 是否安全?

django - 根据对象过滤外键

python-3.x - Django : Error trying to save form