Django response Ожидалось, что из представления будет возвращен `Response`, `HttpResponse` или `HttpStreamingResponse`, но получен `<class 'NoneType'>`.

Моя модель имеет поля атрибутов как файл и человек, который его загрузил, в моем случае я хотел бы показать ошибку "файл не найден" на фронт-энде моего сайта, когда нет данных в модели, но вместо этого она приводит меня к этой ошибке Я реализовал свой код следующим образом

@api_view(('GET',))
def template_view(request):
    data = Mymodel.objects.first()
    try:
        if data:
            response = HttpResponse(
                data.file,
                content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, '
                             'application/vnd.ms-excel',

            )
            return response
    except FileNotFoundError:
        raise ValueError('No file found')

Возможно, вместо повторного вызова ValueError, вы можете возвращать ошибку 400 например.

@api_view(('GET',))
def template_view(request):
    data = Mymodel.objects.first()
    try:
        response = HttpResponse(
            data.file,
            content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, '
                             'application/vnd.ms-excel',

        )
        return response
    except (FileNotFoundError, AttributeError):
        return HttpResponse("No File Found", status=400)

Я бы также перехватывал ошибку AttributeError, а не ставил оператор if для данных

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