AttributeError в / cart / product-1 'QuerySet' объект не имеет атрибута 'items' - PullRequest
1 голос
/ 27 января 2020

Я получаю вышеуказанную ошибку при попытке добавить выбранный товар в корзину и удалить его, если он уже есть в корзине. Ниже мой код. Любая идея, что мне не хватает, спасибо.

Модель корзины:

class Cart(models.Model):
    items = models.ManyToManyField(Item, null=True, blank=True)
    total = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
    created = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)


    def __unicode__(self):
        return "Card Id: %s" %(self.id)

Модель товара:

class Item(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField(null=True, blank=True)
    price = models.DecimalField(max_digits=100, decimal_places=2, default=0.00)
    sale_price = models.FloatField(null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    slug = models.SlugField(unique=True)
    active = models.BooleanField(default=True)

    def __unicode__(self):
        return self.title

The View:

def UpdateCart(request, slug):
    cart = Cart.objects.all()
    try:
        item = Item.objects.get(slug=slug)
    except Item.DoesNotExist:
        pass
    except:
        pass
    if not item in cart.items.all():
        cart.items.add(item)
    else:
        cart.items.remove(item)
    return HttpResponseRedirect(reverse("cart"))

Ответы [ 3 ]

1 голос
/ 27 января 2020

Ваша переменная cart возвращает Queryset не одну строку, вам нужно перебрать queryset, чтобы ваш код работал.

carts = Cart.objects.all()

for cart in carts:
    if not item in cart.items.all():
        cart.items.add(item)
    else:
        cart.items.remove(item)
1 голос
/ 27 января 2020

Когда вы вызываете cart = Cart.objects.all (), возвращаемое значение представляет собой набор запросов, поэтому переменная корзина не имеет элементов атрибута, а, следовательно, и кода ошибки при попытке доступа к нему.

0 голосов
/ 27 января 2020

Это cart = Cart.objects.all() возвращает объект QuerySet, который не имеет атрибута для вашего поля «многие ко многим». Вместо этого вы должны указать точную запись из набора запросов для доступа к связанным элементам.

На данный момент похоже, что вы пытаетесь добавить элементы во все корзины, которые есть в БД:

cart.items.add(item)

Где, я полагаю, вы на самом деле хотели добавить товары в указанную c корзину, например так (например, не рабочий код):

cart = Cart.objects.filter(by_some_field=value).latest()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...