【问题标题】:Override model save to send request along with post_save覆盖模型保存以发送请求以及 post_save
【发布时间】:2017-03-05 20:07:10
【问题描述】:

问题

当模型被保存时,Django 模型发送信号post_save。但是,post_save 无权访问请求对象。我需要访问request.user 之类的变量并将其与信号一起发送。

可能的解决方案

  • Admin - 覆盖 admin save_model 以发送带有来自请求对象的一些额外参数的 post_save

  • DRF API - 创建或更新模型后,发送post_save,再次使用请求对象中的参数。

问题

在上述两种情况下,model.save() 将默认发送post_save。如何覆盖save 以发送自定义信号或使用request.user 重新发送post_save。这应该怎么做?

【问题讨论】:

  • 您确定要post_save 信号吗?如果您需要访问request,您可能应该定义自定义信号并从视图中手动调用它。
  • @НазарТопольський 我想使用post_save,因为它是默认信号。但我对任何其他可行的解决方案持开放态度。

标签: django django-rest-framework django-signals


【解决方案1】:

您可以在 User 模型上以这种方式访问​​用户对象:

from django.contrib.auth.models import User

# post save for creating customer on user saving
def post_save_function(sender, instance, created, **kwargs):

    # create customer instance 
    if created:



post_save.connect(post_save_function, sender=User)

您将可以访问instance 变量中的User

【讨论】:

  • 我猜你没听懂我的问题。
  • 所有 django 模型都会发出 post_save 信号。我想通过 DRF API 或 Django 管理员发送(重新发送)这些信号,但需要额外的 request.user 参数。
猜你喜欢
  • 2018-10-07
  • 2018-07-26
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2020-09-28
  • 2011-05-15
相关资源
最近更新 更多