Несколько файлов в электронной почте Django - PullRequest
0 голосов
/ 31 марта 2020

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

Вот представление, которое показывает список файлов:

def DocListView(request, pk):

    if request.method == "POST":
        documents = request.POST.getlist('checks')


    else:
        return render(request, 'doc_list.html', context)

doc_list. html

<div>
    <ul class="list-group">
      {% for item in PackingListDocs %}
      <li class="list-group-item">
        <a href="{% url 'EditPackingListView' item.Packing_List.pk %}" class="a" type="button">
            <div class="md-v-line"></div><input type="checkbox" name="checks" value="{{ item.PackingListDocument.url|default_if_none:'#' }}">{{item.Packing_List.Name}}<a class="doclink" href="{{ item.PackingListDocument.url|default_if_none:'#' }}" download>View Doc</a>
        </a>
      </li>
      {% endfor %}
    </ul>
  </div>

Итак, как вы можете видеть, я получаю список `` `documents = request.POST.getlist ('check'). Теперь мой следующий вид в настоящее время выглядит следующим образом.

def email(request):
    if request.method == "POST":
        form = EmailForm(request.POST,request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
          # post.published_date = timezone.now()
            post.save()
            email = request.POST.get('email')
            subject = request.POST.get('subject')
            message = request.POST.get('message')
            document = request.FILES.get('document')
            email_from = settings.EMAIL_HOST_USER
            recipient_list = [email]
            email = EmailMessage(subject,message,email_from,recipient_list)
            base_dir = 'media'
            email.attach_file('Poseidon/media/media/'+str(document))
            email.send()
            return redirect('HomeView')
    else:
        form = EmailForm()
        return render(request, 'docemail.html', {'form': form})

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

1 Ответ

1 голос
/ 31 марта 2020

Кажется, что хорошим подходом к этому было бы передать массив файловых объектов в представление def email() и затем l oop через них с помощью email.attach_file

Примерно так:

def email(request, docs):
    if request.method == "POST":
        form = EmailForm(request.POST,request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
          # post.published_date = timezone.now()
            post.save()
            email = request.POST.get('email')
            subject = request.POST.get('subject')
            message = request.POST.get('message')
            document = request.FILES.get('document')
            email_from = settings.EMAIL_HOST_USER
            recipient_list = [email]
            email = EmailMessage(subject,message,email_from,recipient_list)
            base_dir = 'media'
            if docs:
                for doc in docs:
                    email.attach_file('Poseidon/media/media/'+str(doc))
            email.send()
            return redirect('HomeView')
    else:
        form = EmailForm()
        return render(request, 'docemail.html', {'form': form, 'docs': docs})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...