не удалось получить данные из формы django

#django #django-views #django-forms

Вопрос:

forms.py

 class ScanForm(forms.Form):
   image = forms.ImageField()
   xml_file = forms.FileField()
   description = forms.CharField(max_length=500)
 

views.py

 def home(request):
  form = ScanForm()
  if request.method == 'POST':
    form = ScanForm(request.POST, request.FILES)
    if form.is_valid():
      image = form.cleaned_data['image']
      xml_file = form.cleaned_data['xml_file']
      description = form.cleaned_data['description']
  return render(request,'app/home.html',{'form':form})
 

home.html

 <form enctype="multipart/form-data" method = "POST">
   {% csrf_token %}
   {{ form|crispy }}
   <input type="submit" value="Submit" class="btn btn-success btn-lg"/>
 </form>
 

на терминальных значениях изображения печатается только описание, а xml_file, который я получаю, — это None или NoneType

Ответ №1:

Специально для ваших обоих image и xml_file поля могут быть доступны с помощью request.FILES[key_name] . используется form.cleaned_data только для полезной нагрузки, не связанной с файлами.

например, в вашем случае должно быть:

 if form.is_valid():
    image = request.FILES['image']
    xml_file = request.FILES['xml_file']
    description = form.cleaned_data['description']
 

Для получения дополнительной информации об этом вы можете напрямую обратиться к этим документам: https://docs.djangoproject.com/en/dev/topics/http/file-uploads/