title: Django cart not updating quantity
body: <p>Hello I am working on my ecommerce django tutorial and for some reason my simple cart count is not working.  Everytime I add to the cart the {{cart_item_count}} in my cart.html is 0</p>
  
  <p>Also in relation to this code the book has my carts.py as cart.py but since the app is cart for some reason is doesnt like this so I renames my cart.py "carts.py" and did this 
      from cart import carts as cart</p>
  
  <p>Does Django not allow a py file the same name as the app???  </p>
  
  <p>To help with the code</p>
  
  <p>carts.py has a function def cart_disinct_item_count(request) which returns the count which is called in my views.py to set the variable "cart_item_count " which is displayed in my cart.html page but currently no matter what my form has is returns 0.</p>
  
  <p>I didnt post the entire project code but I think I got all the related information needed.  </p>
  
  <p>Thanks</p>
  
  <p>cart.html</p>
  
  <pre><code>{% block content %}
  &lt;h1&gt;Cart Page Here&lt;/h1&gt;
  Cart item count: {{cart_item_count }}
  {% endblock %}
  </code></pre>
  
  <p>cart views.py</p>
  
  <pre><code># Create your views here.
  from django.shortcuts import render_to_response
  from django.template import RequestContext
  from cart import carts as cart
  
  def show_cart(request, template_name="cart/cart.html"):
      cart_item_count = cart.cart_disinct_item_count(request)
      page_title = 'Shopping Cart'
      return render_to_response("cart/cart.html", locals(),
                            context_instance = RequestContext(request))
  </code></pre>
  
  <p>cart item model</p>
  
  <pre><code>class CartItem(models.Model):
  cart_id = models.CharField(max_length=50)
  date_added = models.DateTimeField(auto_now_add = True)
  quantity = models.IntegerField(default = 1)
  product = models.ForeignKey('catalog.Product', unique = False)
  
  class Meta:
      app_label = ''
      db_table = 'cart_items'
      ordering = ['date_added']
  
  def total(self):
      return self.quantity * self.product.price
  def name(self):
      return self.product.name
  def price(self):
      return self.product.price
  
  def get_absolute_url(self):
      return self.product.get_absolute_url()
  def augment_quantity(self, quantity):
          """ called when a POST request comes in for a Product instance already in the shopping cart """
          self.quantity = self.quantity + int(quantity)
          self.save()
  </code></pre>
  
  <p>carts.py</p>
  
  <pre><code>def get_cart_items(request):
      return CartItem.objects.filter(cart_id=_cart_id(request))
  
  #add an item to the cart
  def add_to_cart(request):    
      postdata = request.POST.copy()
      #get product slug from post data, return blank if empty
      product_slug = postdata.get('product_slug', '')
      #get quantity added, return 1 if empty
      quantity = postdata.get('quantity', 1)
      #fetch the product or return a missing page error
      p = get_object_or_404(Product, slug = product_slug)
      #get products in cart
      cart_products = get_cart_items(request)
      product_in_cart = False
      #check to see if item is already in cart
      for cart_item in cart_products:
          if cart_item.product.id == p.id:
              #update the quantity if found
              cart_item.augment_quantity(quantity)
              product_in_cart = True
          if not product_in_cart:
              #create and save a new cart item
              ci = CartItem()
              ci.product = p
              ci.quantity = quantity
              ci.cart_id = _cart_id(request)
              ci.save()
  #returns the total number of items in the user's cart
  def cart_disinct_item_count(request):
      return get_cart_items(request).count()
  </code></pre>
  
  <p>forms.py:</p>
  
  <pre><code>class ProductAddToCartForm(forms.Form):
  quantity = forms.IntegerField(widget=forms.TextInput(attrs={'size':'2',
                                'value':'1', 'class':'quantity'}),
                                error_messages={'invalid': 'Please enter a valid quantity'},
                                min_value = 1)
  product_slug = forms.CharField(widget = forms.HiddenInput())
  
  #override the default __init__ so we can set the request
  def __init__(self, request = None, *args, **kwargs):
      self.request = request
      super(ProductAddToCartForm, self).__init__(*args, **kwargs)
  </code></pre>
  
  <p>*<strong><em>EDIT</em>**</strong>
  forgot to add the view that shows the product and calls add_to_cart:</p>
  
  <pre><code>#new product view, with POST vs GET detection
  </code></pre>
  
  <p>def show_product(request, product_slug, template_name = "catalog/product.html"):</p>
  
  <pre><code>p = get_object_or_404(Product, slug=product_slug)
  
  categories = p.categories.all()
  page_title = p.name
  meta_keywords = p.meta_keywords
  meta_description = p.meta_description
  #need to evaluate the HTTP method
  if request.method == 'POST':
  
      #add to cart....create the bound form
      postdata = request.POST.copy()
      form = ProductAddToCartForm(request, postdata)
  
      #check if posted data is valid
      if form.is_valid():
          #add to cart and redirect to cart page
          cart.add_to_cart(request)
          # if test cookie worked, get rid of it
          if request.session.test_cookie_worked():
              request.session.delete_test_cookie()
  
          url = urlresolvers.reverse('show_cart')
          return HttpResponseRedirect(url)
  else:
      # it's a GET, create the unbound form. Note request as a kwarg
      form = ProductAddToCartForm(request = request, label_suffix = ':')
  
  
      #assign the hidden input the product slug
      form.fields['product_slug'].widget.attrs['value'] = product_slug
      #set the test cookie on our first GET request
      request.session.set_test_cookie()
  
      return render_to_response("catalog/product.html", locals(),   context_instance=RequestContext(request))
  </code></pre>