如何在Django User模型中保存代码?

时间:2016-10-06 21:13:02

标签: python django

我想在为Django用户更改is_active字段时专门运行一些代码,类似于save方法对其他模型的工作方式:

class Foo(models.Model):
    ...
    def save(self, *args, **kwargs):
        if self.pk is not None:
            orig = Foo.objects.get(pk=self.pk)
            if orig.is_active != self.is_active:
                # code goes here

这可以通过与User模型一对一关系的另一个模型来完成吗?类似的东西:

class Bar(models.Model):
    owner = models.OneToOneField(User, on_save=?)
    ...

我想我可以复制相关模型上的is_active字段,然后在保存相关模型时在User上设置is_active字段。但这似乎是一个混乱的解决方案。

1 个答案:

答案 0 :(得分:2)

您正在寻找Signal

from django.db.models.signals import pre_save
from django.contrib.auth.models import User

def do_your_thing(sender, instance, **kwargs):
    # Do something
    print(instance)

pre_save.connect(do_your_thing, sender=User)