Django inlineformset_factory. Request.FILES не возвращает имя файла в форму, когда formset.is_valid() = False

Я пытаюсь позволить пользователю загружать изображения, привязанные к проекту. Я делаю это с помощью inlineformset_factory.

Я предоставляю форму пользователю через представление, основанное на функциях. Когда пользователь не может правильно заполнить один (или более) из наборов форм, formset.is_valid() возвращает false и связанные наборы форм возвращаются пользователю вместе с сообщениями об ошибках. Проблема в том, что поле изображения не возвращается в связанную форму. Таким образом, если пользователь правильно заполнил 2 из 3 форм, то после неудачной валидации ни один из наборов форм не имеет связанного поля изображения. Я не могу понять, работает ли это так, как задумано, или я делаю что-то не так. Если я распечатаю request.FILES, то получу следующее:

<MultiValueDict: {'image_set-0-filename': [<InMemoryUploadedFile: IMG_0017.jpg (image/jpeg)>], 'image_set-1-filename': [<InMemoryUploadedFile: sprite.svg (image/svg+xml)>]}>

Я хочу, чтобы поле изображения было привязано и показывало пользователю, какое значение имеет поле.

перед неправильным отправлением формы

после неправильной отправки формы

Надеюсь, вы увидите, где моя ошибка, или подскажете мне, если я думаю об этом неправильно.

Заранее благодарю

forms.py

class EndUserImageForm(forms.ModelForm):
    class Meta:
        model = Image
        fields = ["filename", "description"]
        widgets = {
        "filename": forms.FileInput(attrs={"class": "form__field no--outline"}),
        "description": forms.Textarea(attrs={"class": "form__field no--outline", "placeholder":    "Description"})
        }

EndUserImageInlineFormset = inlineformset_factory(
    Project, Image, form=EndUserImageForm, extra=2)

views.py

def image_formset(request, pk):
    project = get_object_or_404(Project, pk=pk)

    image_formset = EndUserImageInlineFormset(request.POST or None, request.FILES or None)

    context = {
        "image_formset": image_formset
        }

    if request.method == "POST":
        if image_formset.is_valid():
            images = image_formset.save(commit=False)
            for image in images:
                image.project = project
                image.save()
            return HttpResponseRedirect(reverse("projects:home"))
    return render(request, "projects/test.html", context)

шаблон

    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <h4>Add Images</h4>
        {{ image_formset.non_form_errors }}
        {{ image_formset.management_form }}
        <div id="image-form-list">    
        
        {% for form in image_formset %}
             {{ form.errors }}    
             <div class="image_form">
                {{ form.filename }} 
                {{ form.description }} 
            </div>
        {% endfor %}
        </div>
        <input type="submit" value="Save" class="button button--main activate"/>
    </form>

models.py

class Image(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    filename = models.ImageField(upload_to=project_directory_path, blank=False)
    description = models.CharField(max_length=350, blank=True)
    created = models.DateTimeField(auto_now_add=True)
def image_formset(request, pk):
     project = get_object_or_404(Project, pk=pk)
     image_formset = EndUserImageInlineFormset() 

if request.method == "POST": image_formset = EndUserImageInlineFormset(request.POST or None, request.FILES or None)

if image_formset.is_valid():h images = image_formset.save(commit=False) для image in images: image.project = project image.save()

Вернуться на верх