我发现了这个 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)
我知道这并不理想,最好通过单独的模型 Profile
向 User
添加字段和函数。
话虽如此,我只想了解这是如何工作的:
我应该把猴子补丁代码放在哪里?
代码什么时候运行——只运行一次?每个 Python 解释器启动一次?每个请求一次?
大概我仍然需要更改数据库架构。因此,如果我删除表
User
并运行./manage.py syncdb
,syncdb
会“知道”一个新字段已添加到用户
?如果不是,我该如何更改架构?
最佳答案
将文件 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/