---------- Forwarded message ---------
From: Parul. <[email protected]>
Date: Wed, Jun 23, 2021, 11:34 PM
Subject: Error while creating an ecommerce website :PLEASE HELP!
To: <[email protected]>


Hi,
I am working on an ecommerce website. I am facing an error. Can anyone
please help me solve this error.
I am not able to fetch the PRODUCT_ID

1. views.py (APP-CART)
-------------------------------------------------------------------------------------------------------
from django.shortcuts import render,redirect
from .models import Cart
from new_app.models import Product

# Create your views here.


def cart_home(request):

    cart_obj,new_obj=Cart.objects.new_or_get(request)
    products=Cart.objects.all()



    return render(request,'carts/home.html',{})


def cart_update(request):
        print(request.POST)
        # print(dict(request.POST.items()))
        # print("in func")

        product_id=1
        print('id below')
        print(product_id) // not able to get the value of product id in
console
        product_obj=Product.objects.get(id=product_id)
        cart_obj,new_obj=Cart.objects.new_or_get(request)
        if product_obj in cart_obj.products.all():
            cart_obj.products.remove(product_obj)
        else:
            cart_obj.products.add(product_obj)
        return redirect('home')



--------------------------------------------------------------------------------------------
2. models.py  (cart)


from django.db import models
from django.conf import settings
from new_app.models import Product
from django.db.models.signals import pre_save,post_save,m2m_changed



User=settings.AUTH_USER_MODEL

class CartManager(models.Manager):
    def new_or_get(self,request):
        cart_id=request.session.get("cart_id",None)
        # qs=self.get_queryset().filter(id=cart_id)
        qs=self.get_queryset().only('products')

        print(qs)
        if qs.count()==1:
                new_obj=False
                cart_obj=qs.first()
                print('cart obj below')
                print(cart_obj)
                if request.user.is_authenticated and cart_obj.user is None:

                    cart_obj.user=request.user
                    cart_obj.save()


        else:
                cart_obj=Cart.objects.new_cart(user=request.user)
                new_obj=True
                request.session['cart_id']=cart_obj.id
        return cart_obj,new_obj

    def new_cart(self,user=None):
        user_obj=None
        if user is not None:
            if user.is_authenticated:
                user_obj=user
        return self.model.objects.create(user=user_obj)

class Cart(models.Model):

user=models.ForeignKey(User,null=True,blank=True,on_delete=models.CASCADE)
    products=models.ManyToManyField(Product,blank=True)

subtotal=models.DecimalField(default=0.00,max_digits=100,decimal_places=2)

    total=models.DecimalField(default=0.00,max_digits=100,decimal_places=2)
    timestamp=models.DateTimeField(auto_now_add=True)
    updated=models.DateTimeField(auto_now=True)

    objects=CartManager()

    def __str__(self):
        return str(self.id)


def m2m_changed_cart_receiver(sender,instance,action,*args,**kwargs):
    print(action)
    if action=='post_add' or action=='post_remove' or action=='clear':
        products=instance.products.all()
        total=0
        for x in products:
            total += x.price
        if instance.subtotal != total:
            instance.subtotal=total
            instance.save()
m2m_changed.connect(m2m_changed_cart_receiver,sender=Cart.products.through)


def pre_save_cart_receiver(sender,instance,*args,**kwargs):
    if instance.subtotal>0:
        instance.total=instance.subtotal + 10
    else:
        instance.total=0.00

pre_save.connect(pre_save_cart_receiver,sender=Cart)




OUTPUT IN CONSOLE:

<QueryDict: {'csrfmiddlewaretoken':
['FMk2gTq6XXxZ2HU40I6h4b3WtPl59Drf1urwUNufDZUeSFPMzGNwU4L1QuGCiCbB'],
'product_id':
 ['']}>     -------- GETTING EMPTY DICTIONARY  INSTEAD OF GETTING PRODUCT
ID i.e. 1
id below
1
<QuerySet [<Cart: 13>]>


So, I am unable to fetch the productc id there besides the csrf....
i tried to individually print the product id.. which came as 1...(written
under"id below" in output)

Can anyone pls help me with this.




Also, adding update_cart.html
<form method='POST' action='{% url 'update' %}'class="form ">{% csrf_token
%}
  <input type="hidden"  name='product_id' vallue= "{{ product_id }}">
  {% if product in cart.products.all %}
  <button type="submit" class="btn btn-link">remove</button>
  {% else %}
  <button type="submit" class="btn btn-success">add to cart</button>
  {% endif %}

  </form>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAHjHRFqpGEcZj6-Enq_uwZJRbKZRVwJEti9BfKBwg%2Bv%3Dkr4kjA%40mail.gmail.com.

Reply via email to