1
votes

I don't think there's much explanation to this, the problem is straight forward. I get an error saying Edit: I added the full error traceback at the bottom.

Error:

"if i in items:
NameError: name 'items' is not defined"

code:

class Cart:
items = {}
def addToCart(item):
    global items
    for i in item:
        if i in items:
            items[i] += item[i]
        else:
            items.update(item)
            
def removeFromCart(item):
    global items
    for i in item:
        if i in items and items[i] > 1:
            items[i] -= 1
        elif i in items and items[i] <= 1:
            items.pop(i, None)

How the function is called:

...
from .cart import Cart
...
@action(detail=True, methods=["POST"])
def addToCart(self, request, pk=None):
    item = request.data['item']
    Cart.addToCart(item)
    response = Cart.items
    return Response(response, status = status.HTTP_200_OK)

Internal Server Error: /api/Orders/1/addToCart/ Traceback (most recent call last): File "/home/bigmac/anaconda3/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view return view_func(*args, **kwargs) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/viewsets.py", line 125, in view return self.dispatch(request, *args, **kwargs) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py", line 509, in dispatch response = self.handle_exception(exc) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py", line 469, in handle_exception self.raise_uncaught_exception(exc) File "/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception raise exc File "/home/bigmac/anaconda3/lib/python3.7/site-packages/rest_framework/views.py", line 506, in dispatch response = handler(request, *args, **kwargs) File "/home/bigmac/Documents/Bernard_Quests/ALUTA3.0/ALUTA/api/views.py", line 89, in addToCart Cart.addToCart(item) File "/home/bigmac/Documents/Bernard_Quests/ALUTA3.0/ALUTA/api/cart.py", line 7, in addToCart if i in items: NameError: name 'items' is not defined

1
First, items should be indented to match Cart class. And we don't know if two methods are part of Cart class(I think so though).MarkSouls
A class attribute is not global and I guess your dictionary should actually be an instance attribute. Additionally your methods are missing the self argument.Klaus D.
items looks like a class attribute. Use Cart.items instead of global variables. Also I assume the methods addToCart and removeFromCart belong to the class, Why are you not accepting self as an argument? Or at least using a classmethod decorator and accepting the class as cls or some other name?Abdul Aziz Barkat

1 Answers

0
votes

try this

You should also declare items in the global scope before it is used.

class Cart:
   items = {}
   def addToCart(item):
       global items
       var_items = items
       for i in item:
          if i in var_items:
            items[i] += item[i]
          else:
            var_items.update(item)
            
   def removeFromCart(item):
      global items
      var_items = items
      for i in item:
         if i in var_items and var_items[i] > 1:
            items[i] -= 1
        elif i in var_items and var_items[i] <= 1:
            items.pop(i, None)

Refer this https://docs.python.org/3/reference/simple_stmts.html#the-global-statement