Django Ecommerce View проблема с увеличением или уменьшением количества товаров с одинаковым Product Id, но разными значениями Option ID

Моя проблема, вероятно, что-то простое, но я застрял на ней. Я пытаюсь заставить мою корзину ecommerce увеличивать количество товара вверх и вниз, удаляя экземпляр, когда количество становится равным нулю. Проблема в том, что при добавлении опций к товару, который находится в другом экземпляре cart_item с тем же базовым Product_id, выдает ошибку.

Я знаю, что в один запрос get попадают разные экземпляры одного и того же product_id, но не уверен, как это решить.

MultipleObjectsReturned at /cart/add_cart/2/ get() returned more than one CartItem -- it returned 2! Request Method: GET Request URL: http://127.0.0.1:8000/cart/add_cart/2/ Django Version: 3.1 Exception Type: MultipleObjectsReturned Exception Value: get() returned more than one CartItem -- it returned 2! Exception Location: C:\Users\dave\Desktop\tnaecommerce\venv\Lib\site-packages\django\db\models\query.py, line 433, in get Python Executable: C:\Users\dave\Desktop\tnaecommerce\venv\Scripts\python.exe Python Version: 3.11.0 Python Path: ['C:\\Users\\dave\\Desktop\\tnaecommerce\\ecomwebsite\\tnaecom', 'C:\\Python311\\python311.zip', 'C:\\Python311\\DLLs', 'C:\\Python311\\Lib', 'C:\\Python311', 'C:\\Users\\dave\\Desktop\\tnaecommerce\\venv', 'C:\\Users\\dave\\Desktop\\tnaecommerce\\venv\\Lib\\site-packages'] Server time: Mon, 19 Dec 2022 16:19:11 +0000

views.py

`

`

url.py

`

from django.urls import path
from . import views

'''
  /cart/ starting url from root url

  '''


urlpatterns = [
  
    path('', views.cart, name='cart'),
    path('add_cart/<int:product_id>/', views.add_cart, name = 'add_cart'),
    path('remove_cart/<int:product_id>/', views.remove_cart, name = 'remove_cart'),
    #path('remove_cart_item/<int:product_id>/', views.remove_cart_item, name = 'remove_cart_item'),
    path('remove_cart_item/<int:id>/', views.remove_cart_item, name = 'remove_cart_item')
] 

`

models.py

`

`

Простите, что беспокою вас о чем-то, что, я уверен, настолько незначительно. Буду признателен за помощь.

Для решения этой проблемы я попробовал множество вариантов прямого извлечения id cart_item и добился некоторого успеха в увеличении его количества. Я просто не могу заставить числа увеличиваться и добавлять больше экземпляров.

Я уверен, что решением является некоторая вариация того, как я увеличил значение количества вниз в

remove_cart_item

`

def remove_cart_item(request, id):    

  cart_item = CartItem.objects.get(id=id) # get the cart item
  # get the cart
  try:
    cart = Cart.objects.get(cart_id = _cart_id(request) ) # gets cart using private function above
  except Cart.DoesNotExist:# creates a new cart instance if it doesnt exist
    Cart.objects.create(
      cart_id = _cart_id(request)
    )
  cart.save()#saves new cart if needed to be created     
  if cart_item.quantity > 1:
            cart_item.quantity -= 1
            cart_item.save()
  else:
      cart_item.delete() # save the cart item if there are still items left in the cart 
  return redirect("cart")

`

Я просто не уверен, как реализовать это в функциональности add_cart со всем остальным, что там происходит. Ошибка появляется только при попытке добавить другой товар с включенными опциями. Опция базового уровня работает нормально

используйте filter() вместо get() при выборке cart-items в функции add-cart. cart_item = CartItem.objects.filter(product = product, cart = cart).

get() возвращает объект модели, а filter возвращает экземпляр. У вас есть одна корзина с множеством элементов в ней. Чтобы получить их, вы должны использовать filter(). Вы сталкиваетесь с ошибкой, потому что элементы корзины получают больше данных, а метод get() возвращает только один объект. В самой ошибке говорится, что MultipleObjectsReturned at /cart/add_cart/2/ get() returned more than one CartItem -- it returned 2!. поэтому используйте метод filter()

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