Django отправить письмо после удаления объекта - PullRequest
0 голосов
/ 10 июля 2020

Надеюсь, кто-то сможет помочь. Я новичок в 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>

Что не идеально. Я предполагаю, что это может быть что-то глупое, что мне не хватает, но, как я уже сказал, я довольно новичок, и я пробовал почти все, но ничего не работает. Кто-нибудь может мне помочь, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

Когда вы получаете доступ к полю модели через представление, вам необходимо получить данные из экземпляра модели. Это будет представлять расположение атрибута:

Booking.<some_field>

я предполагаю, что вы хотите получить доступ к экземпляру, который вы удаляете, в этом случае используйте

self.<some_field>

дайте мне знать, сработало ли это; )

0 голосов
/ 11 июля 2020

Покопавшись в нем, я нашел, вероятно, самое простое решение, которое меняло строковое представление моей модели на


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

Это не идеальное решение, но на данный момент это все, что мне нужно. Таким образом, администратор получит электронное письмо со всей информацией, которая ему понадобится, чтобы узнать, кто отменил бронирование.

Большое спасибо всем участникам.

0 голосов
/ 10 июля 2020

я думаю, вам следует использовать «бронирование» вместо «бронирования», поэтому вы передали context_object_name = 'booking' классу

...