Как мне решить эту ошибку Django HttpResponse?

Моя проблема в том, что в шаблонах и в CMD у меня вместо изображений возвращается None.

Мнения:

    class AddProductImages(TemplateView):
    template_name = "addimages.html"

    def post(self, *args, **kwargs):
        try:
            images = self.request.FILES.getlist('images')
            product = Product.objects.get(id = self.kwargs['pk'])

            for image in images:
                product_images = Images.objcts.create(
                        product = product,
                        images = image

                    )
            return redirect('index')
        except Exception as e:
            print(e)

Урлы:

path('addimages/<int:pk>/', AddProductImages.as_view(), name="addimages"),

Шаблоны:

<div class="container my-5">
    <br />
<h1>ADD IMAGE</h1>
    <br />
    <hr />
    <form action="" method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="images" id="" class="form-control" multiple>
        <br>
        <button type="submit" class="btn btn-sm btn-primary my-3">Submit</button>
    </form>
</div>

Результаты:

""" The result is so: what's the problem please?
ValueError: The view photo.views.AddProductImages didn't return an HttpResponse object. It returned None instead.
[31/Aug/2022 22:08:11] "POST /addimages/1/ HTTP/1.1" 500 65400
"""

Не мог бы кто-нибудь проверить это, пожалуйста? Спасибо!

Скорее всего, исключено, поскольку это единственное место, где вы ничего не возвращаете.

Я также понимаю, почему это исключение.

product_images = Images.objcts.create(
                        product = product,
                        images = image

                    )

должно быть:

product_images = Images.objects.create(
                        product = product,
                        images = image

                    )

Эй, по крайней мере, теперь вы узнали, почему такие пустые except заявления, как это, не годятся. Попробуйте быть более конкретным в исключениях. Вы даже можете сделать так:

try:
    code...
except ValueError as e:
    print(e)
except Product.DoesNotExist as e:
    print(e)

Таким образом, вы можете адаптировать свой код к возникающим исключениям, и простое SyntaxError не застанет вас врасплох, как сейчас.

Важно возвращать объект HttpResponse. Вот как это исправить -

  1. Поймав исключение, вы все равно должны вернуть объект HTTPResponse. При отсутствии оператора возврата произойдет ошибка с сообщением, которое вы сейчас получаете.
  2. Чтобы решить проблему №1, я добавил еще один оператор перенаправления в блок исключения. Пожалуйста, добавьте цель, которая работает в вашем случае.
  3. При создании Image допущена опечатка. Должно быть Images.objects.create. В настоящее время опечатка находится на слове object. Из-за ошибки поток попадает в блок исключений и впоследствии нарушает ваш поток.
class AddProductImages(TemplateView):
    template_name = "addimages.html"

    def post(self, *args, **kwargs):
        try:
            images = self.request.FILES.getlist('images')
            product = Product.objects.get(id = self.kwargs['pk'])

            for image in images:
                product_images = Images.objects.create(
                        product = product,
                        images = image

                    )
            return redirect('index')
        except Exception as e:
            return redirect('some_other_target')
Вернуться на верх