Как разрешить аутентифицированным пользователям отправлять новостные рассылки от администратора django - PullRequest
0 голосов
/ 17 октября 2018

Я внедряю приложение для рассылки новостей для веб-сайта компании.Моя цель - позволить «будущему» администратору веб-сайта запускать новостную рассылку непосредственно от администратора.

Для этого я написал следующий код:

models.py

from django.db import models
from ckeditor.fields import RichTextField

class NewsletterSubscription(models.Model):
    datetime = models.DateTimeField(auto_now_add = True)
    email = models.EmailField(max_length=128)

    class Meta:
        verbose_name = 'Iscritto Newsletter'
        verbose_name_plural = 'Iscritti Newsletter'

    def __unicode__(self):
        return self.email

class Newsletter(models.Model):
    EMAIL_STATUS_CHOICES = (
        ('Draft', 'Draft'),
        ('Pubblicata', 'Pubblicata')
    )
    subject = models.CharField(max_length=250)
    body = RichTextField()
    email = models.ManyToManyField(NewsletterSubscription)
    status = models.CharField(max_length=10, choices=EMAIL_STATUS_CHOICES)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __unicode__(self):
        return self.subject

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

admin.py

from django import forms
from django.contrib import admin
from .models import NewsletterSubscription, Newsletter
from ckeditor.widgets import CKEditorWidget

class NewsletterSubscriptionAdmin(admin.ModelAdmin):
    list_display = ('email', 'datetime', )

class NewsletterAdminForm(forms.ModelForm):
    body = forms.CharField(widget=CKEditorWidget())
    class Meta:
        model = Newsletter
        fields = '__all__'

class NewsletterAdmin(admin.ModelAdmin):
    form = NewsletterAdminForm

admin.site.register(NewsletterSubscription, NewsletterSubscriptionAdmin)
admin.site.register(Newsletter, NewsletterAdmin)

Заранее благодарим за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 18 октября 2018

Чтобы получить кнопку в панели администратора, вы можете просто создать метод, который будет возвращать HTML:

class NewsletterAdmin(admin.ModelAdmin):
    ...

    readonly_fields = ['send_mails']

    def send_mails(self, obj):
        url_red = 'url_of_your_view_to_send_mails'
        return format_html(
            '<a class="button" href="{}">Send</a>&nbsp;',
            url_red,
        )

Затем он будет отображаться как кнопка на странице администратора, которая отправит запрос GETна URL-адрес представления, где вы можете определить всю логику и отправлять письма.Включите это настраиваемое поле в атрибут fields .

Надеюсь, это поможет.

...