Файлы не загружены в форму Django - неверный тип кодировки - PullRequest
0 голосов
/ 01 мая 2020

Мы используем Django с хрустящими формами на наших сайтах. У меня есть форма, представленная {% crispy form %}. Вот код формы:

class ProfileForm(AddAttributesToFieldsMixin, CleanDateOfBirthMixin, LocalizedFirstLastNameMixin, forms.ModelForm):
    profile_picture = forms.ImageField(required=False, widget=CustomPhotoWidget, label=_('Update your profile picture'), error_messages={'required': _("A profile picture is required.")})

    class Meta:
        model = User
        fields = ('slug', 'gender', 'date_of_birth', 'profile_picture')

Форма использует CustomPhotoWidget, который определяется следующим образом:

class CustomPhotoWidget(forms.widgets.Widget):
    def render(self, name, value, attrs=None, renderer=None):
        return render_to_string(template_name='accounts/edit_profile/widgets/photo_widget.html', context={
            'name': name,
            'user_photo': self.attrs['user'].photo,
        })

Но проблема в том, когда я загружаю файл из моего В браузере появляется сообщение об ошибке «Файл не был отправлен. Проверьте тип кодировки в форме». и файл не сохраняется. Тип кодировки формы неверен. Как изменить тип кодировки с помощью хрустящих форм?

1 Ответ

0 голосов
/ 01 мая 2020

Я отправил вопрос на GitHub и попросил помощи у разработчика, с которым я работаю, Аарон Чонг . Он проверил и выяснил проблему. CustomPhotoWidget должно быть определено так:

class CustomPhotoWidget(forms.widgets.Widget):
    needs_multipart_form = True

    def render(self, name, value, attrs=None, renderer=None):
        return render_to_string(template_name='accounts/edit_profile/widgets/photo_widget.html', context={
            'name': name,
            'user_photo': self.attrs['user'].photo,
        })

needs_multipart_form = True - это то, что необходимо для исправления типа кодировки формы. Я загружаю это решение в Stack Overflow, потому что не нашел needs_multipart_form задокументированного в других вопросах на сайте.

...