【问题标题】:How to execute code on save in Django User model?如何在 Django 用户模型中执行保存代码?
【发布时间】:2016-10-06 21:13:02
【问题描述】:

我想在为 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

这可以通过与用户模型一对一关系的另一个模型来完成吗?比如:

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

我想我可以在相关模型上复制 is_active 字段,然后在保存相关模型时在 User 上设置 is_active 字段。但这似乎有点混乱。

【问题讨论】:

标签: python django


【解决方案1】:

你正在寻找这个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)

【讨论】:

  • 好的,这看起来不错。如何在 do_your_thing 中引用 pk 和新字段值?
  • 不应该是“def do_your_thing(instance, **kwargs):”吗?
  • 我相信实例在发件人之后。
猜你喜欢
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2011-01-14
  • 2020-08-16
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多