MultiValueDictKeyError at /sendEmail/ 'file'

Я пытаюсь отправить вложение по электронной почте в своем проекте с Django. Но я получаю такую ошибку. Я знаю, что этот вопрос уже задавался, но ему почти 10 лет, и на некоторые из них даже не было ответа. Так что мне нужна помощь 😅. Заранее спасибо..

Мои коды следующие:

Django=3.2.7
django-crispy-forms==1.12.0

views.py

# send email
def sendMail(request):
    message = request.POST.get("message", "")
    subject = request.POST.get("subject", "")
    receivers = request.POST.get("email", "")
    email = EmailMessage(subject, message, settings.EMAIL_HOST_USER, [receivers])
    email.content_subtype = "html"

    file = request.FILES["file"]
    #file = request.POST.get("file")
    email.attach(file.name, file.read(), file.content_type)
    
    email.send()
    return HttpResponse(f"Sent to {receivers}")

forms.py

class EmailForm(forms.Form):
    # receivers email
    email = forms.EmailField()
    subject = forms.CharField(max_length=100)
    file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
    message = forms.CharField(widget = forms.Textarea)

models.py

# for sending email
class EmailReportModel(models.Model):
    """
    this model created just for email foreignKey
    """
    #receiver_emails = models.ForeignKey(BolgeMailListeleri, on_delete=models.CASCADE, related_name = "receiver_emails")
    receiver_emails = models.ManyToManyField(BolgeMailListeleri)

    subject = models.CharField(max_length=255, default="")
    message = models.TextField()
    upload = models.FileField(upload_to='uploads', null=True, blank=True)
    #upload = models.Field()
    #image1 = forms.Field(label='sample photo', widget = forms.FileInput,    required = True )

SendEmail.html

{% load crispy_forms_tags %}
<div class="main">
    <!-- Create a Form -->
    <form method="post" enctype="multipart/form-data">
        <!-- Security token by Django -->
        {% csrf_token %}
        {{ form|crispy }}
    <button type="submit">Gönder</button>
    </form>
    <button onclick="goBack()" class="btn btn-danger">İptal Et</button>

</div>

<script>
    function goBack() {
      window.history.back();
    }
</script>

settings.py

# need an actual email
EMAIL_HOST = "smtp.gmail.com"
EMAIL_PORT = 587
EMAIL_HOST_USER = "mygmail@gmail.com"
EMAIL_HOST_PASSWORD = "****"
EMAIL_USE_TLS = True

urls.py

urlpatterns = [
    path('sendEmail', sendMail, name='send-email'),
]
Вернуться на верх