Error while creating an ecommerce website :PLEASE HELP!

15 views
Skip to first unread message

Parul.

unread,
Jun 23, 2021, 2:06:13 PM6/23/21
to django...@googlegroups.com
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>





Aadil Rashid

unread,
Jun 23, 2021, 2:09:17 PM6/23/21
to django...@googlegroups.com
Pass I'd to the view you are you are using,
And then get products thrid that I'd by simple ORM quriy

Product = model name.objects.get(id=id)

--
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 django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAHjHRFpf_EfU%3DSSFFTMOeb5JkuNKL%3DuSNVtp782A2r_R-M0_DA%40mail.gmail.com.

Parul.

unread,
Jun 23, 2021, 2:36:42 PM6/23/21
to django...@googlegroups.com
Hi ,

I am doing :             product_obj=Product.objects.get(id=product_id)
in the cart_update function in views.py 

but when trying to print this object... i am not getting anything... is this function is not working? 


Aadil Rashid

unread,
Jun 23, 2021, 2:38:32 PM6/23/21
to django...@googlegroups.com
First pass Id as an argument along with request to that particular view function

Parul.

unread,
Jun 23, 2021, 3:20:56 PM6/23/21
to django...@googlegroups.com
Hi,
I tried to pass the id..but its not working
I observed while debugging, the try catch block is not getting implemented... i tried to put some print statements there..but they are not getting printed
The print statements in models.py -- new_or_get func()  are working

Parul.

unread,
Jun 24, 2021, 1:20:10 AM6/24/21
to django...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages