Ответ 1
Действия администратора позволяют легко подключать пользовательские действия, которые могут быть выполнены на выбранных элементах на страницах списка admin.
в моем приложении Django у меня есть модель информационного бюллетеня. Теперь я хочу, чтобы выслал бюллетень (и даже повторно отправить) из Django Admin.
Я мог бы сделать это с помощью метода Model.save()
, но есть ли другой способ, который не привязан к модели?
Спасибо
Действия администратора позволяют легко подключать пользовательские действия, которые могут быть выполнены на выбранных элементах на страницах списка admin.
Если вы делаете это из admin, вам нужно переопределить метод save(), но это может быть сохранение AdminModel... не обязательно должно быть полным сохранением модели.
Однако, если вы отправляете по электронной почте большое количество электронных писем, лучшим подходом было бы установить django-mailer, который помещает электронные письма в очередь для последующей обработки, а затем предоставляет новую команду управления: send_mail.
Итак, как только вы готовы отправить рассылку новостей, вы можете вручную запустить python manage.py send_mail
. Любые электронные письма с ошибками будут перенесены в отложенную очередь, где вы можете повторить отправку позже.
Вы можете автоматизировать это, выполнив manage.py send_mail
из cron.
Если вы действительно хотите получить фантазию и сделать это с сайта администратора, установите django-chronograph и настройте расписание send_mail.
вы можете попробовать https://www.youtube.com/watch?v=WvL1cR2MgLI
просто измените
def available (modeladmin,request,queryset):
queryset.update(status='ava')
def not_available (modeladmin,request,queryset):
queryset.update(status='not')
к чему-то вроде
def send(modeladmin, request, queryset):
for data in queryset:
subject=data.title
message=data.mesage
for d in Users.objects.filter(newsletter=True):
email=d.email
sendemail = EmailMessage(subject, message+unsubscribe, '[email protected]',
[email], [],
headers = {'Reply-To': '[email protected]'})
sendemail.content_subtype = "html"
sendemail.send()