Skip to content

Commit df4e104

Browse files
committed
Added Ecommerce Project
1 parent ad9a2a1 commit df4e104

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+994
-0
lines changed

Ecommerce_Project/__init__.py

Whitespace-only changes.

Ecommerce_Project/cart/__init__.py

Whitespace-only changes.

Ecommerce_Project/cart/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

Ecommerce_Project/cart/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class CartConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'cart'
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Generated by Django 4.1.5 on 2023-07-11 06:24
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
initial = True
10+
11+
dependencies = [
12+
('shop', '0001_initial'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Cart',
18+
fields=[
19+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
20+
('cart_id', models.CharField(blank=True, max_length=250)),
21+
('date_added', models.DateField(auto_now_add=True)),
22+
],
23+
options={
24+
'db_table': 'Cart',
25+
'ordering': ['date_added'],
26+
},
27+
),
28+
migrations.CreateModel(
29+
name='CartItem',
30+
fields=[
31+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
32+
('quantity', models.IntegerField()),
33+
('active', models.BooleanField(default=True)),
34+
('cart', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cart.cart')),
35+
('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shop.product')),
36+
],
37+
options={
38+
'db_table': 'CartItem',
39+
},
40+
),
41+
]

Ecommerce_Project/cart/migrations/__init__.py

Whitespace-only changes.

Ecommerce_Project/cart/models.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from django.db import models
2+
from shop.models import Product
3+
# Create your models here.
4+
class Cart(models.Model):
5+
cart_id=models.CharField(max_length=250,blank=True)
6+
date_added=models.DateField(auto_now_add=True)
7+
8+
class Meta:
9+
db_table='Cart'
10+
ordering=['date_added']
11+
def __str__(self):
12+
return '{}'.format(self.cart_id)
13+
14+
class CartItem(models.Model):
15+
product=models.ForeignKey(Product,on_delete=models.CASCADE)
16+
cart=models.ForeignKey(Cart,on_delete=models.CASCADE)
17+
quantity=models.IntegerField()
18+
active=models.BooleanField(default=True)
19+
20+
class Meta:
21+
db_table='CartItem'
22+
def sub_total(self):
23+
return self.product.price*self.quantity
24+
def __str__(self):
25+
return '{}'.format(self.product)
26+
27+
28+

Ecommerce_Project/cart/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

Ecommerce_Project/cart/urls.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.urls import path
2+
from . import views
3+
4+
app_name='cart'
5+
6+
urlpatterns=[
7+
path('add/<int:product_id>/',views.add_cart,name='add_cart'),
8+
path('',views.cart_detail,name='cart_detail'),
9+
]

Ecommerce_Project/cart/views.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
2+
from django.shortcuts import render, redirect
3+
from shop.models import Product
4+
from .models import Cart,CartItem
5+
from django.core.exceptions import ObjectDoesNotExist
6+
7+
def _cart_id(request):
8+
cart=request.session.session_key
9+
if not cart:
10+
cart=request.session.create()
11+
return cart
12+
13+
def add_cart(request,product_id):
14+
product=Product.objects.get(id=product_id)
15+
try:
16+
cart=Cart.objects.get(cart_id=_cart_id(request))
17+
except Cart.DoesNotExist:
18+
cart=Cart.objects.create(
19+
cart_id=_cart_id(request)
20+
)
21+
cart.save(),
22+
try:
23+
cart_item=CartItem.objects.get(product=product,cart=cart)
24+
cart_item.quantity +=1
25+
cart_item.save()
26+
except CartItem.DoesNotExist:
27+
cart_item=CartItem.objects.create(
28+
product=product,
29+
quantity=1,
30+
cart=cart
31+
)
32+
cart_item.save()
33+
return redirect('cart:cart_detail')
34+
def cart_detail(request,total=0,counter=0,cart_items=None):
35+
try:
36+
cart=Cart.objects.get(cart_id=_cart_id(request))
37+
cart_items=CartItem.objects.filter(cart=cart,active=True)
38+
for cart_item in cart_items:
39+
total+=(cart_item.product.price * cart_item.quantity)
40+
counter +=cart_item.quantity
41+
except ObjectDoesNotExist:
42+
pass
43+
return render(request,'cart.html',dict(cart_items=cart_items,total=total,counter=counter))
44+
45+
46+

0 commit comments

Comments
 (0)