【问题标题】:Django send email after deleting objectDjango在删除对象后发送电子邮件
【发布时间】:2020-07-10 14:23:16
【问题描述】:

我希望有人能够提供帮助。我是 Django 的新手,在使用 CBV DeleteView 后难以发送电子邮件。这是我的模型:

class  Bookings(models.Model):
    service = models.CharField(max_length=255, null=True)
    your_email = models.EmailField()
    name = models.CharField(max_length=155)
    date = models.DateField()
    time = models.TimeField()
    user = models.ForeignKey(CustomUser, 
           on_delete=models.CASCADE)

    def __str__(self):
        return self.your_email

    def get_absolute_url(self):
        return reverse('booking_list')

这是我的观点:

class BookingDeleteView(DeleteView):
    model = Bookings
    template_name = 'booking_delete.html'
    context_object_name = 'booking'
    success_url = reverse_lazy('booking_list')

    def delete(self, request, *args, **kwargs):
        self.object = self.get_object()
        success_url = self.get_success_url()
        send_mail(
            subject='CANCELLATION!!',
            message=str(Bookings.service) + str(Bookings.date) +/ 
                    str(Bookings.time),
            from_email=Bookings.your_email,
            recipient_list=['testadmin@admin.com']
        )
        self.object.delete()
        return HttpResponseRedirect(success_url)

不幸的是,我只获得了电子邮件中数据的位置,以下是收到的电子邮件的示例:


Subject: CANCELLATION!!
web_1  | From: <django.db.models.query_utils.DeferredAttribute object at
web_1  |  0x7ff230211e50>
web_1  | To: testadmin@admin.com
web_1  | Date: Fri, 10 Jul 2020 14:15:29 -0000
web_1  | Message-ID: <159439052931.455.4373660896961612525@992781d7c153>
web_1  | 
web_1  | <django.db.models.query_utils.DeferredAttribute object at 0x7ff230211df0><django.db.models.query_utils.DeferredAttribute object at 0x7ff230211f10><django.db.models.query_utils.DeferredAttribute object at 0x7ff230211d60>

这并不理想。我想这可能是我错过的一些愚蠢的事情,但就像我说的我很新,我几乎尝试了所有东西,但没有任何效果。有人可以帮帮我吗?

【问题讨论】:

    标签: django django-models django-class-based-views


    【解决方案1】:

    我认为您应该使用“预订”而不是“预订”,这就是您将 context_object_name = 'booking' 传递给班级的原因

    【讨论】:

    • 您好,感谢您的回复,但不幸的是,此解决方案也不起作用
    【解决方案2】:

    深入研究后,我发现可能是最简单的解决方案,即将我的模型的字符串表示形式更改为

    
    def __str__(self):
            return '%s %s %s %s %s' % (self.service, self.your_email, self.name, self.date, self.time) 
    

    这不是理想的解决方案,但目前它就是我所需要的。这样,管理员将收到一封电子邮件,其中包含他需要的所有信息,以便了解谁取消了预订。

    非常感谢所有的贡献者。

    【讨论】:

      【解决方案3】:

      当您通过视图访问模型的字段时,您需要从模型的实例中检索数据。 这将表示属性位置:

      Booking.<some_field>
      

      我猜你想访问你正在删除的实例,在这种情况下使用

      self.<some_field>
      

      让我知道它是否有效;)

      【讨论】:

      • 嗨,感谢您的快速回复。恐怕这不起作用:(它说它是无效的语法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多