Wednesday, June 23, 2021

Error while creating an ecommerce website :PLEASE HELP!

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 django-users+unsubscribe@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.

No comments:

Post a Comment