Отправка электронной почты на основе атрибута — Django 1.8

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

База контактов выглядит так:

NAME | CATEGORY | EMAIL
john |    man   | [email protected]
sue  |    woman | [email protected]
spot |    dog   | [email protected]

Я хочу отправлять контакты по электронной почте на основе категории. Форма будет выглядеть примерно так:

Target Audience: men[] women[] dogs[]
Subject: 
Message:

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

У меня есть форма ниже, которая, я думаю, может работать, но мой разум уже исчерпан.

class EmailForm(forms.Form):

    CATEGORY_CHOICES = (
    ...
    )
    subject = forms.CharField(required=True)
    message = forms.CharField(required=True)
    from_email = forms.CharField()
    targetAudience = forms.MultipleChoiceField(choices=CATEGORY_CHOICES,
                                    widget=widgets.CheckboxSelectMultiple())

В конечном итоге мне нужно использовать флажки, чтобы определить TargetAudience в представлении, и сделать что-то вроде следующего.

group = contact.objects.get(category==TargetAudience)

list = group.objects.values_list('email')

`send_mail`(mass mailing up to a few hundred) to this list.

РЕДАКТИРОВАТЬ: представление вместе

def email_test(request):
    if request.method == 'GET':
        form = EmailForm()
    else:
        form = EmailForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            from_email = form.cleaned_data['from_email']
            targetaudience = form.cleaned_data['targetAudience']
            target_audience = contacts.objects.get(category=targetaudience)
            email_list = target_audience.objects.values_list('email', flat=True)
            send_mail(subject, message, from_email, email_list)

person tim    schedule 27.10.2015    source источник
comment
values_list предоставит вам список кортежей по умолчанию, передайте flat=True в качестве аргумента ключевого слова в values_list, если вам нужен только список адресов электронной почты.   -  person GwynBleidD    schedule 27.10.2015


Ответы (1)


Предполагая, что form.cleaned_data['targetAudience'] возвращает список категорий, вы можете сделать что-то вроде:

email_list = Contact.objects.filter(category__in=targetaudience).values_list('email', flat=True)
person Nathan Villaescusa    schedule 28.10.2015