Локальная переменная 'product' упоминается до присвоения

Я пытаюсь создать представление на django, которое позволит пользователям создавать новый продукт на сайте.

class CreateProductView(APIView):
    serializer_class = CreateProductSerializer

    def post(self, request, format = None):
        

        serializer = self.serializer_class(data=request.data)
        if serializer.is_valid():
            name = serializer.data.name
            content = serializer.data.content
            category = serializer.data.category

            product = Product(name=name, content=content, category=category)
            product.save()

        return Response(ProductSerializer(product).data, status=status.HTTP_201_CREATED)

Но он выдает эту ошибку:

UnboundLocalError at /api/create-product
local variable 'product' referenced before assignment
Request Method: POST
Request URL:    http://127.0.0.1:8000/api/create-product
Django Version: 4.0.5
Exception Type: UnboundLocalError
Exception Value:    
local variable 'product' referenced before assignment
Exception Location: H:\Extension Drive (H)\My Software Applications\DeCluttered_Life\declutterd_life\api\views.py, line 42, in post
Python Executable:  C:\Python310\python.exe
Python Version: 3.10.5
Python Path:    
['H:\\Extension Drive (H)\\My Software '
 'Applications\\DeCluttered_Life\\declutterd_life',
 'C:\\Python310\\python310.zip',
 'C:\\Python310\\DLLs',
 'C:\\Python310\\lib',
 'C:\\Python310',
 'C:\\Python310\\lib\\site-packages']
Server time:    Fri, 02 Dec 2022 17:26:24 +0000

Я пытался найти другие проблемы, похожие на эту, но не смог найти решение.

Вы пытаетесь сослаться на переменную product до того, как она была присвоена, когда serializer.is_valid() имеет значение False.

Вы должны переместить строку ответа внутрь оператора if, чтобы она возвращалась только если serializer.is_valid() равен True и обработать ответ для недействительного сериализатора, например, ошибкой http.

Проверьте, возвращает ли serializer.is_valid() переменную True. Если нет, то ваш код пытается вернуть объект Response, который использует переменную product. Однако, если ваш serializer.is_valid() возвращает False, объект Response по-прежнему создается с переменной product, которая еще не была создана.

Возможно, имеет смысл написать функциональность, которая обрабатывает ситуацию, когда ваш serializer.is_valid() возвращает False. В этом случае, вероятно, вам не нужна переменная product.

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