Reputation: 31
i am trying to build an ecommerce website with django and got this error. The views.py and models.py has been updated
django.core.exceptions.FieldError: Cannot resolve keyword 'item' into field. Choices are: Item, Item_id, id, order, ordered, quantity, user, user_id.
views.py (updated)
def add_to_cart(request, pk):
item = get_object_or_404(Item, pk=pk)
order_item, created = OrderItem.objects.get_or_create(
Item = item,
user = request.user,
ordered=False
)
order_qs = Order.objects.filter(
user = request.user,
ordered=False
)
if order_qs.exists():
order = order_qs[0]
if order.item.filter(Item__id=item.pk).exists():
order_item.quantity += 1
order_item.save()
messages.info(request, f"Your cart xxxxxxxxxxxx")
return redirect("/")
else:
order.item.add(order_item)
messages.info(request, f"Your cart is xxxxxx")
return redirect("/")
else:
ordered_date=timezone.now()
order = Order.objects.create(user = request.user, ordered_date=ordered_date)
order.item.add(order_item)
messages.info(request, f"Your cart is xxxxxxxx")
return redirect("/")
models.py
class Item(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(max_length=250)
label = models.CharField(choices=label_choices, max_length=2, blank=True, null=True)
category = models.CharField(choices=category_choices, max_length=2, blank=True, null=True)
price = models.FloatField()
discount_price = models.FloatField(blank=True, null=True)
#image = models.ImageField()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse("product", kwargs={'pk': self.pk})
def get_add_to_cart_url(self):
return reverse("add_to_cart", kwargs={'pk': self.pk})
class OrderItem(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
ordered = models.BooleanField(default=False)
quantity = models.IntegerField(default=1)
item = models.ForeignKey(Item, on_delete=models.CASCADE)
class Order(models.Model):
item = models.ManyToManyField(OrderItem)
user = models.ForeignKey(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE)
ordered = models.BooleanField(default=False)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
traceback
[15/Jul/2020 15:56:50] "GET /add_to_cart/1/ HTTP/1.1" 500 117383
Internal Server Error: /add_to_cart/1/
Traceback (most recent call last):
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Lenovo\decommerce\websites\views.py", line 55, in add_to_cart
ordered=False
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\manager.py",
line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 559, in get_or_create
return self.get(**kwargs), False
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 404, in get
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 904, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\query.py", line 923, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\query.py", line 1354, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\query.py", line 1385, in _add_q
check_filterable=check_filterable,
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\query.py", line 1254, in build_filter
lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\query.py", line 1088, in solve_lookup_type
_, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "C:\Users\Lenovo\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\sql\query.py", line 1487, in names_to_path
"Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword 'item' into field. Choices are: Item, Item_id, id, order, ordered, quantity, user, user_id
[15/Jul/2020 15:56:55] "GET /add_to_cart/1/ HTTP/1.1" 500 117383
Upvotes: 2
Views: 1413
Reputation: 368
Line no 4
def add_to_cart(request, pk):
item = get_object_or_404(Item, pk=pk)
order_item, created = OrderItem.objects.get_or_create(
Item = item, #change it Item
user = request.user,
ordered=False
)
Never declare model attribute with Upper case Leave em all lowercase
Upvotes: 1