Django Обработка загрузки нескольких изображений

У меня есть простой проект, который имеет две различные модели. Одна обрабатывает отчет, а другая хранит изображения для каждого отчета, связанные между собой ForeignKey:

class Report(models.Model):
    report_location = models.ForeignKey(Locations, on_delete=models.CASCADE)
    timesheet = models.ImageField(upload_to='report_images', default='default.png')
    text = models.CharField(max_length=999)
    report_date = models.DateField(auto_now=True)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE)


    def __str__(self):
        return f"{self.report_location, self.report_date, self.created_by}"

class TimeSheetAndPics(models.Model):
    report = models.ForeignKey(Report, on_delete=models.CASCADE)
    report_images = models.ImageField(upload_to='report_images', default='default.png')
    date = models.DateField(auto_now=True)


    def __str__(self):
        return f"{self.report} on {self.date}"

Моя цель состоит в том, чтобы пользователь заполнил отчет, а затем загрузил несколько изображений, однако я не могу понять, как обрабатывать загрузку нескольких изображений.

У меня есть две формы для каждой модели:

class ReportCreationForm(ModelForm):
    class Meta:
        model = Report
        fields = [
            'report_location',
            'text',
        ]


class TimeSheetAndPicForm(ModelForm):
    report_images = forms.FileField(widget=ClearableFileInput(attrs={'multiple': True}))
    time_sheets = forms.FileField(widget=ClearableFileInput(attrs={'multiple': True}))

    class Meta:
        model = TimeSheetAndPics
        fields = [
            'time_sheets',
            'report_images',
        ]

А вот как я пытаюсь работать со своими взглядами:

class NewReport(LoginRequiredMixin, View):
    def get(self, request):
        context = {
            'create_form': ReportCreationForm(),
            'image_form': TimeSheetAndPicForm(),
        }
        return render(request, 'rakan/report_form.html', context)

    def post(self, request):
        post = request.POST
        data = request.FILES or None
        create_form = ReportCreationForm(post)
        image_form = TimeSheetAndPicForm(post, data)

        if create_form.is_valid() and image_form.is_valid():
            clean_form = create_form.save(commit=False)
            clean_form.created_by = request.user
            clean_form.save()

            clean_image_form = image_form.save(commit=False)

            for images in clean_image_form:
                clean_image_form.report = clean_form
                clean_image_form.report = images

                clean_image_form.save()

            return redirect('rakan:rakan_index')

        return redirect('rakan:new-report')

Я пытался решить эту проблему разными способами, но, к сожалению, уперся в стену. Я не могу найти решение, которое действительно работает. В моей лучшей попытке мне удалось сохранить только 1 изображение в моделях вместо 3 тестовых изображений.

Я не верю, что это имеет значение, но вот HTML файл, который использует формы:

<div class="content-section">
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">Create Report</legend>
            {{ create_form }}
            <br>
            {{ image_form }}
        </fieldset>
        <div class="form-group">
            <button class="btn btn-outline-info" type="submit">submit</button>
        </div>
    </form>
</div>

Если кто-нибудь, кто имел дело с этой проблемой, захочет помочь мне найти решение, я буду очень благодарен. Спасибо.

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