【问题标题】:Django Send mail only when one particular field is changedDjango 仅在更改某个特定字段时发送邮件
【发布时间】:2018-12-05 11:59:12
【问题描述】:

我正在使用: RQ scheduler

我的项目中有一个 Job 模型:

class Job(models.Model):
    # Other fields
    status = models.CharField(
        max_length=2, choices=choices.JOB_STATE_CHOICES, default=choices.PENDING_APPROVAL)

我每天晚上都安排了一个任务,它将检查今天批准的所有工作,并向我的用户发送有关它的邮件。

所以查询:

jobs = Job.objects.filter(status='APPROVED',
                          updated_at__date=datetime.today().date())

这个查询的问题是我怎么知道这个工作状态字段只在今天改变了。

即使今天更改了职位名称并且状态在 5 天前更改了,此查询也会找到职位。

我只需要提取那些今天“状态”字段已更改的作业。

【问题讨论】:

  • 模型中的 updated_at 字段的类型是什么?
  • 是日期时间字段

标签: python django redis


【解决方案1】:

您应该使用django-dirtyfields 并立即发送电子邮件或将此job_id 添加到RQ。 完整文档here

或仅当status 更改(再次是django-dirtyfields)时更新updated_at 字段,如编写自己的save() 方法。

def save(self):
    if self.status = 'aproved' and 'status' in self.get_dirty_fields():
        # add to RQ
        # or set updated_at = datetime.now()  # if you dont use on_update=datetime.now
    super(...).save()

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 2017-12-13
    • 1970-01-01
    • 2013-10-22
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多