python - 现有配置文件上的 Django 配置文件更新
问题描述
当新用户注册然后向管理员发送电子邮件通知他们新用户时,我有以下信号用于创建配置文件
@receiver(post_save, sender=User)
def create_user_profile(sender, **kwargs):
'''Create a profile for a new user'''
if kwargs['created']:
Profile.objects.create(user=kwargs['instance'])
@receiver(post_save, sender=User)
def notify_admin(sender, instance, created, **kwargs):
'''Notify the administrator that a new user has been added.'''
if created:
subject = 'New Registration created'
message = 'A new candidate %s has registered with the site' % instance.email
from_addr = 'no-reply@example.com'
recipient_list = ('admin@example.com', )
send_mail(subject, message, from_addr, recipient_list)
我还希望在更新配置文件时通知管理员,但我正在努力想出解决方案。
有任何想法吗?
解决方案
方法-1
正如@Ralf所说,对模型使用不同的信号Profile
并检查created
标志
@receiver(post_save, sender=Profile)
def profile_update_signal(sender, instance, created, **kwargs):
# Profile update signal
if not created:
# do something here <<<<<<
send_mail()
方法 - 2
覆盖模型的save()
方法Profile
class Profile(models.Model):
# your fields
def save(self, *args, **kwargs):
if self.pk: # not a new object
# do something here <<<<<<
send_mail()
super(Profile, self).save(*args, **kwargs)
推荐阅读
- sql - xmlSample - 文件不是有效的 xml:文档中根元素之前的标记必须格式正确。SQL XML
- python - 如何让类似节奏的机器人在加入语音频道时播放音乐?
- javascript - 如何在单击时停止 iOS 滚动动画
- qt-creator - QtCreator 找不到属于我的项目的头文件 (.h)
- material-ui - 在 GitHub Pages 上构建 Material-UI TextField 时出错
- javascript - 从 websocket 中的客户端接收到的解码缓冲区
- java - 有没有办法在 bytebuddy 拦截方法中使用 Methodcall 调用带有字段的可变长度参数方法?
- php - Woocommerce - 检查某些属性是否存在,显示属性标签并列出所有变体
- python-3.x - 从 PySpark RDD 中删除重复的元组对
- node.js - 使用节点运行 bash 脚本,包含脚本中的函数