我们如何通知管理员用户新添加的项目,默认项目 is_active=False

How can we notify the admin about newly added project by user, by default project is_active=False

如何在仪表板上通知管理员(而不是通过邮件),并验证所有项目或拒绝项目。

class Compaigns(models.Model):
    nameOfDeceased = models.CharField(max_length=100, null=False, blank=False)
    nameOfDeceasedEn = models.CharField(max_length=100, null=False, blank=False)
    projectName = models.CharField(max_length=255, null=False, blank=False)
    projectNameEn = models.CharField(max_length=255, null=False, blank=False)
    phone = models.CharField(max_length=255, null=False, blank=False)
    image = models.ImageField(upload_to='projects/compaigns/%Y/%m/%d', blank=True, null=True)
    is_compaign = models.BooleanField(default=True)
    **is_active = models.BooleanField(default=False)**
    detail = models.TextField(blank=True, null=True)
    detailEn = models.TextField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    suggestedDonation = models.DecimalField(
        max_digits=10, decimal_places=3, default=0.000)
    compaignCategory = models.ManyToManyField(CompaignCategory)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.nameOfDeceased

    class Meta:
        verbose_name_plural = "Compaigns"

您可以通过以下方式实现:

  1. 重写 models.Modelsave() 方法
  2. 使用post_save信号

通过覆盖 save() 方法:

class Compaigns(models.Model):
    # ... Your model's fields

    def __str__(self):
        return self.nameOfDeceased

    class Meta:
        verbose_name_plural = "Compaigns"

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)  # Call the "real" save() method.
        send_notification() # your method to send notification to admin 

使用 signal 比覆盖 save() 方法稍微复杂一些。为了进一步阅读,我添加了 django 文档 link.