Charles Ezema
Charles Ezema

Reputation: 31

django.core.exceptions.FieldError: Cannot resolve keyword 'item' into field. Choices are: Item, Item_id, id, order, ordered, quantity, user, user_id

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

Answers (1)

Ceetified_karma
Ceetified_karma

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

Related Questions