Пользовательское действие / функция модели в django admin - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь отправлять информационные бюллетени подписанным пользователям по электронной почте. Для этого я сделал:

Я создал пользовательскую функцию send_mail () в своей модели для отправки писем подписанным пользователям

class Post(models.Model):

    'model fields here'


    def __str__(self):
        return self.title + ' by ' + self.author


    def send_mail(self, request):
        content = self.content
        title = self.title
        slug = self.slug
        series_name = self.series_name
        confirmed_subscribers = Subscriber.objects.values_list('email').filter(confirmed=True)
        current_site = get_current_site(request)
        subject = "New Blog - '" + title + "' @ AM-Blogs!!"
        message = render_to_string('new_post.html',{
                'title': title,
                'content': content,
                'slug': slug,
                'series_name': series_name,
                'domain': current_site.domain,
            })

        for sub in confirmed_subscribers:

            email = EmailMessage(
            subject,
            message,
            settings.EMAIL_HOST_USER,
            [sub],
            )
            email.fail_silently = True
            email.send()

        return redirect ('Home')

Затем в admin.py:

class PostAdmin(admin.ModelAdmin):

    class Media:
        js = ('tinyInject.js',)

    actions = ['send_mail']

    def send_mail(self, request, queryset):
        for post in queryset:
            post.send_mail(request)
    send_mail.short_description = "Send selected Newsletters to all subscribers"




admin.site.register(Post, PostAdmin)

И когда я попал в свою админ-панель и выполнил действие:

Ошибка:

ValueError at /admin/blog/post/
not enough values to unpack (expected 2, got 1)

Выделенная ошибка:

D:\My_Projects\My-Blog\blog\admin.py in send_mail
            post.send_mail(request) …
▶ Local vars
D:\My_Projects\My-Blog\blog\models.py in send_mail
            email.send() …
▶ Local vars

Как я могу решить Эта проблема? Пожалуйста, помогите !!

1 Ответ

0 голосов
/ 27 мая 2020

Хорошо !! Я сам решил. Единственная ошибка заключалась в том, что «to_email» (получатели электронной почты) - подписчики - это сам список.

код должен быть примерно таким:

emailsub = EmailMessage(
                subject,
                message,
                settings.EMAIL_HOST_USER,
                sub,
                )

вместо:

emailsub = EmailMessage(
                subject,
                message,
                settings.EMAIL_HOST_USER,
                [sub],
                )

Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...