Когда форма Django недействительна, почему только ввод типа файла остается?

Если после отправки моей Django Form есть недействительное поле, другие поля имеют входные значения при отправке, но только входные значения типа файла будут опустошены. Я не думаю, что в Dajngo нужно что-то менять. Возможно, это особенность html ввода типа файла?

Например, моя форма сжимает видеофайлы, загруженные пользователями. И это занимает довольно много времени. Если после отправки формы что-то пойдет не так, пользователь должен снова выбрать файл и продолжить процесс сжатия. Это не очень хорошо.

Forms.py

class VideoArtUploadForm(forms.ModelForm):
    class Meta:
        model = models.VideoArt
        fields = (
            "video",
            "thumbnail",
            "poster",
            "title",
            "year",
            "artist",
            "description",
        )
        widgets = {
            "video": forms.FileInput(attrs={"accept": "video/mp4"}),
            "title": forms.TextInput(attrs={"placeholder": "Il titolo del video"}),
            "year": forms.TextInput(
                attrs={"placeholder": "l'anno in cui il video è uscito"}
            ),
            "artist": forms.TextInput(attrs={"placeholder": "Il nome di artista"}),
            "description": forms.Textarea(
                attrs={"placeholder": "una descrizione del video "}
            ),
        }

    def clean_thumbnail(self):
        thumbnail = self.cleaned_data.get('thumbnail')
        if thumbnail:
            if thumbnail.size > 10*1024*1024:
                raise forms.ValidationError("Thumnail si deve essere meno di 10MB")
            return thumbnail
        else:
            raise forms.ValidationError("Thumnail è necessario")

    def clean_poster(self):
        poster = self.cleaned_data.get('poster')
        if poster and (type(poster) != str):
            if poster.size > 10*1024*1024:
                raise forms.ValidationError("Cover image si deve essere meno di 10MB")
            return poster
    
    def clean_video(self):
        video = self.cleaned_data.get("video")
        if video and (type(video) != str):
            if video.size > 1000*1024*1024:
                raise forms.ValidationError("Il video si deve essre meno di 1GB")
            return video


    def save(self, *args, **kwargs):
        videoart = super().save(commit=False)
        video = self.cleaned_data.get("video")
        video_path = video.temporary_file_path()
        get_duration =  subprocess.check_output(['ffprobe', '-i', f'{video_path}', '-show_entries', 'format=duration', '-v', 'quiet', '-of', 'csv=%s' % ("p=0")])
        duration = int(float(get_duration.decode('utf-8').replace("\n", ""))) 
        videoart.duration = duration    
        return videoart

Views.py

class VideoArtUpload(user_mixins.MoiveUploadPermissionView, FormView):

    """VideoartUpload View Definition"""

    form_class = forms.VideoArtUploadForm
    template_name = "videoarts/videoart_upload.html"

    def form_valid(self, form):
        videoart = form.save()
        videoart.user = self.request.user
        videoart.save()
        return redirect(reverse("videoarts:detail", kwargs={"pk": videoart.pk}))

Шаблон загрузки - форма

<form id="upload_video_form" method="post" enctype="multipart/form-data">
            {% csrf_token %}
                {% if form.non_field_errors %}
                    {% for error in form.non_field_errors %}
                     {% include "../mixins/nonefield_error.html" %}
                    {% endfor %}
                {% endif %}
            <div class="upload_form__sections">
                <div class="video-section">
                    {% for field in form %}
                            <div class="upload_form_field">
                                <div class="upload_form_label">{{field.label}}</div>
                                {{field}}
                                {% if field.errors %}
                                {% for error in field.errors %}
                                    {% include "../mixins/field_error.html" %}
                                {% endfor %}
                                {% endif %}
                            </div>
                    {% endfor %}
                    <div class="upload_submit">
                        <button>Carica</button>
                        <div id="progress" hidden>
                            <span id="progress_bar"></span>
                        </div>
                    </div>
                </div>  
            </div>            
        </form> 
Вернуться на верх