Загрузка файла Django возвращает None - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь загрузить файл изображения с помощью Django. Я могу получить другие данные формы, но не файл изображения. request.FILES пустоНиже мой код.

models.py

class Module(models.Model):
    title = models.CharField(max_length = 50)
    slug = models.CharField(max_length = 50)
    description = models.TextField(max_length = 500)

Forms.py

class ModuleAddForm(forms.ModelForm):
    title = forms.CharField(max_length = 50, widget = forms.TextInput(attrs = {'class': 'form-control', 'placeholder': 'Title'} ))
    description = forms.CharField(max_length = 50, widget = forms.Textarea(attrs = {'class': 'form-control', 'placeholder': 'Description'} ))
    image = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}), required=False)

    class Meta:
        model = Module
        fields = ['title', 'description', 'image']

Views.py

form = ModuleAddForm(request.POST, request.FILES or None)

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

HTML

<form class="kt-form" method = "POST" id="kt_form userform" enctype=”multipart/form-data” >{% csrf_token %}
  <div class="form-group row">
    <label class="col-3 col-form-label">Title</label>
    <div class="col-9">
      {{ form.title }}
    </div>
  </div>

  <div class="form-group row">
    <label class="col-3 col-form-label">Description</label>
    <div class="col-9">
      {{ form.description }}
    </div>
  </div>

  <div class="form-group row">
    <label class="col-3 col-form-label">Image</label>
    <div class="col-9">
      {{ form.image }}     
    </div>
  </div> 
  <button type="submit" class="btn btn-brand">Save</button>
</form>

Когда я печатаю request.FILES, он возвращался пустым, а также когда я пытался получить его с помощью Keyон вернул ошибку MultiValueDict. Но когда я печатаю request.POST, изображение было там. Но это было бесполезно, потому что изображение не было загружено.

Я использую другую модель для хранения файлов изображений этой модели (модуля), потому что он может содержать несколько изображений. Я реализовал ту же логику в моей другой модели и функции. Там он работает правильно, но не работает здесь.

Я использую Django 2.2.

1 Ответ

0 голосов
/ 07 ноября 2019

Как сказал Арджун, в вашей модели нет поля изображения. Вы можете создать еще одну ModelForm для своей модели с изображением и отобразить ее в дополнение к другой форме на своей веб-странице.

Возьмите это в качестве примера. Форма пользователя и форма профиля, где в профиле есть изображение.

Forms.py

class UserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = get_user_model()
        fields = ['email']


class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = get_user_model()
        fields = ['image']

views.py

    if request.method == 'POST':
        user_form = UserUpdateForm(request.POST, instance=request.user)
        profile_form = ProfileUpdateForm(request.POST, request.FILES, instance=request.user)

        if user_form.is_valid() and profile_form.is_valid():
            user_form.save()
            profile_form.save()
            messages.success(request, f"Your account has been updated")
            return redirect('profile')

Джинджа

    <form method="POST" enctype="multipart/form-data">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom mb-4">Profile Info</legend>
        {{ user_form | crispy }}
        {{ profile_form | crispy }}
      </fieldset>
      <div class="form-group">
        <button class="btn btn-outline-info" type="submit">Update</button>
      </div>
    </form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...