Есть такая проблема:
В форме есть поле добавления файла. Добавляем файл, отправляем письмо –> на почту все что нужно приходит. Но проблема в том, что если не добавить файл, то ничего не приходит )
Сама форма:
class FileForm(forms.Form): f_name = forms.CharField(required=True, max_length=50) f_mail = forms.EmailField(required=True) f_message = forms.CharField(required=True, max_length=500) f_file = forms.FileField(widget = forms.FileInput) f_news = forms.BooleanField(required=False)
Представление:
if request.method == 'POST': file_form = FileForm(request.POST, request.FILES) if file_form.is_valid(): f_name = file_form.cleaned_data['f_name'] f_mail = file_form.cleaned_data['f_mail'] f_message = file_form.cleaned_data['f_message'] f_news = file_form.cleaned_data['f_news'] f_file = request.FILES['f_file'] news = '' if f_news: news = 'Посетитель дал согласие на получение новостей' from_email = '###############' to_email = ['###########', ] subject = 'Страничная форма' full_message = "От %s ( %s ) %s. Сообщение: %s" %(f_name, f_mail, news, f_message) try: mail = EmailMessage(subject, full_message, from_email, to_email) if not f_file == None: # Попытка проверки, но результата не дало mail.attach(f_file.name, f_file.read(), f_file.content_type) mail.send() except: return HttpResponse('Invalid mail send!') return redirect(index) else: file_form = FileForm()
Кусок шаблона:
<div class="block_left"> {% if file_form.is_multipart %} <form class="form_question" role="form" method="post" action=" " enctype="multipart/form-data"> {% else %} <form class="form_question" role="form" method="post" action=" "> {% endif %} {% csrf_token %} <div class="row_block"> <label for="f_name"> <span class="form_title">Ваше имя</span> <input type="text" name="f_name" placeholder="Имя" required /></label> <span class="name_text">######################</span> </div> <div class="row_block"> <label for="f_mail"> <span class="form_title">Почта</span> <input type="text" name="f_mail" placeholder="Email" required /></label> <span class="upload_wrapper"> <div class="fileform"> <div class="selectbutton">Прикрепить файл</div> <input id="upload" type="file" name="f_file" /> </div> </span> </div> <div class="row_block"> <label for="f_message"> <span class="form_title">Вопрос</span> <textarea name="f_message" id="textform" cols="30" rows="4"></textarea> </label> <span class="wrapper_checkbox"> <input type="checkbox" name="f_news" id="checkbox" value="a1" checked /> <label for="checkbox"></label> <strong>Подписаться на новости и акции</strong> <input type="submit" value="Отправить" id="button_submit"> </span> </div> </form> </div>
Убирал из формы шаблона:
<input id=“upload” type=“file” name=“f_file” /> (Так как по идее is_multipart обращает внимание type=“file” и соответственно выводит enctype=“multipart/form-data”)
И оставлял только: <form class=“form_question” role=“form” method=“post” action=“ ”> . Но отправка не происходит. Проверял это дело для того, что если бы без этих элементов заработало, то можно было бы задачу переложить на JS (при клике на див/кнопке добавления файла —> добавляются элементы input и enctype). Значит собака зарыта во вьюхе.
Подскажите как решить проблему