Python django创建和修改的猴子补丁
我在一年前部署了一个应用程序。在生产中,我不愿意手动更改所有模型,以添加由创建的Python django创建和修改的猴子补丁,python,django,monkeypatching,Python,Django,Monkeypatching,我在一年前部署了一个应用程序。在生产中,我不愿意手动更改所有模型,以添加由创建的和由修改的字段,因为这样做风险不大 不管怎么说,我们可以用更少的代码来实现它,我们可以修复它(至少对于未来的事务,它应该将这些字段添加到每个模型中?) 我想用猴子来修补它,但不知道如何实现它 from django.apps import apps from django.db import models from django.contrib.auth import get_user_model model_li
和由
修改的字段,因为这样做风险不大
不管怎么说,我们可以用更少的代码来实现它,我们可以修复它(至少对于未来的事务,它应该将这些字段添加到每个模型中?)
我想用猴子来修补它,但不知道如何实现它
from django.apps import apps
from django.db import models
from django.contrib.auth import get_user_model
model_list = apps.get_models()
#-- Monkey Patch
for model in model_list:
if model != get_user_model():
model.add_to_class('created_by', models.CharField(max_length=250,blank=True, null=True))
model.add_to_class('modified_by', models.CharField(max_length=250,blank=True, null=True))
def save(self):
if self.pk:
self.created_by = request.user.id #not sure, how I would get the user here from request
self.modified_by = request.user.id
return super(model, self).save(*args, **kwargs)
model.add_to_class("save", save)
可以考虑包含这些字段的基础抽象模型并从中继承其他模型。但不确定它将如何与迁移一起工作。
我认为最好的方法是使用这两个字段创建一个抽象类,并在每个类中继承它。唯一需要记住的是,您需要为它们提供初始值:
类用户操作(models.Model):
创建人=models.ForeignKey(用户,在删除=models.SET时为空,空白=True,空=True)
已修改用户=models.ForeignKey(用户,在删除=models.SET时为NULL,空白=True,NULL=True)
类元:
抽象=真
#从UserAction类继承
类MyClass(用户操作):
# ... 领域