Как я могу сделать список получателей переменной send_mail? - PullRequest
0 голосов
/ 15 мая 2018

Я строю рыночную площадь с Джанго. Мы создали страницу со списком магазинов и страницу с информацией о магазине. Кроме того, я хотел бы иметь возможность отправлять почту в каждый магазин на странице сведений о магазине.

Однако мы не знаем, как при отправке почты на странице сведений о магазине изменить адрес получателя send_mail на mailAddress каждого магазина.

■ view.py

from django.views import generic
from django.views.generic.edit import ShopView
from django.views.generic.edit import FormMixin
from .models import Shop
from .forms import ContactForm

class ShopView(FormMixin, generic.DetailView):

    model = Shop
    form_class = ContactForm

    def get_template_names(self):
        return 'shopSearch/shop_detail.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

    def get_success_url(self):
        return 'contact/finish/'

    def post(self, request, *args, **kwargs):
        self.object = self.get_object()
        form = self.get_form()

        if form.is_valid():
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

    def form_valid(self, form):
        form.send_email()
        return super().form_valid(form)

■ model.py

class Shop(models.Model):
    name         = models.CharField(max_length=255)
    mailAddress  = models.CharField(max_length=100, null=True, blank=True)

■ form.py

from django import forms
from django.core.mail import send_mail
from django.conf import settings

class ContactForm(forms.Form):
    title = forms.CharField()
    email = forms.EmailField()
    contents = forms.CharField(widget=forms.Textarea)

    def send_email(self):
        subject = self.cleaned_data['title']
        from_email = self.cleaned_data['email']
        contents = self.cleaned_data['contents']
        message = '\n\ncontens:\n' + contents + '\n\nfrom to:\n' + from_email
        to = <<mailAddress for each shop>>
        send_mail(subject, message, settings.EMAIL_HOST_USER, to)

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать send_email с to.

class ContactForm(forms.Form):
    title = forms.CharField()
    email = forms.EmailField()
    contents = forms.CharField(widget=forms.Textarea)

    def send_email(self, to):
        subject = self.cleaned_data['title']
        from_email = self.cleaned_data['email']
        contents = self.cleaned_data['contents']
        message = '\n\ncontens:\n' + contents + '\n\nfrom to:\n' + from_email
        send_mail(subject, message, settings.EMAIL_HOST_USER, to)

И передать to список из form_valid() в поле зрения.

...
def form_valid(self, form):
    # set to email list for your model
    # maybe you want to this?
    to = [self.object.mailAddress]
    form.send_email(to)
    return super().form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...