Skip to content

Commit e7a4e46

Browse files
author
mattfreire
committed
Add-to and remove-from cart
1 parent a303c3c commit e7a4e46

15 files changed

+327
-339
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Generated by Django 2.2 on 2019-04-26 06:59
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0001_initial'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='item',
15+
name='category',
16+
field=models.CharField(choices=[('S', 'Shirt'), ('SW', 'Sport wear'), ('OW', 'Outwear')], default='S', max_length=2),
17+
preserve_default=False,
18+
),
19+
migrations.AddField(
20+
model_name='item',
21+
name='label',
22+
field=models.CharField(choices=[('P', 'primary'), ('S', 'secondary'), ('D', 'danger')], default='P', max_length=1),
23+
preserve_default=False,
24+
),
25+
]

core/migrations/0003_item_slug.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:15
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0002_auto_20190426_0659'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='item',
15+
name='slug',
16+
field=models.SlugField(default='test-product'),
17+
preserve_default=False,
18+
),
19+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:17
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0003_item_slug'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='item',
15+
name='discount_price',
16+
field=models.FloatField(blank=True, null=True),
17+
),
18+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:21
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0004_item_discount_price'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='item',
15+
name='description',
16+
field=models.TextField(default='This is a test description fefwefweifjwief jeiwfjeiwfj iwef jiwef weif ewj'),
17+
preserve_default=False,
18+
),
19+
]

core/migrations/0006_item_quantity.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:31
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0005_item_description'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='item',
15+
name='quantity',
16+
field=models.IntegerField(default=1),
17+
),
18+
]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:37
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0006_item_quantity'),
10+
]
11+
12+
operations = [
13+
migrations.RemoveField(
14+
model_name='item',
15+
name='quantity',
16+
),
17+
migrations.AddField(
18+
model_name='orderitem',
19+
name='quantity',
20+
field=models.IntegerField(default=1),
21+
),
22+
]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:56
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12+
('core', '0007_auto_20190426_0737'),
13+
]
14+
15+
operations = [
16+
migrations.AddField(
17+
model_name='orderitem',
18+
name='ordered',
19+
field=models.BooleanField(default=False),
20+
),
21+
migrations.AddField(
22+
model_name='orderitem',
23+
name='user',
24+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
25+
),
26+
]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 2.2 on 2019-04-26 07:57
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('core', '0008_auto_20190426_0756'),
12+
]
13+
14+
operations = [
15+
migrations.AlterField(
16+
model_name='orderitem',
17+
name='user',
18+
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
19+
),
20+
]

core/models.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,57 @@
11
from django.conf import settings
22
from django.db import models
3+
from django.shortcuts import reverse
4+
5+
CATEGORY_CHOICES = (
6+
('S', 'Shirt'),
7+
('SW', 'Sport wear'),
8+
('OW', 'Outwear')
9+
)
10+
11+
LABEL_CHOICES = (
12+
('P', 'primary'),
13+
('S', 'secondary'),
14+
('D', 'danger')
15+
)
316

417

518
class Item(models.Model):
619
title = models.CharField(max_length=100)
720
price = models.FloatField()
21+
discount_price = models.FloatField(blank=True, null=True)
22+
category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
23+
label = models.CharField(choices=LABEL_CHOICES, max_length=1)
24+
slug = models.SlugField()
25+
description = models.TextField()
826

927
def __str__(self):
1028
return self.title
1129

30+
def get_absolute_url(self):
31+
return reverse("core:product", kwargs={
32+
'slug': self.slug
33+
})
34+
35+
def get_add_to_cart_url(self):
36+
return reverse("core:add-to-cart", kwargs={
37+
'slug': self.slug
38+
})
39+
40+
def get_remove_from_cart_url(self):
41+
return reverse("core:remove-from-cart", kwargs={
42+
'slug': self.slug
43+
})
44+
1245

1346
class OrderItem(models.Model):
47+
user = models.ForeignKey(settings.AUTH_USER_MODEL,
48+
on_delete=models.CASCADE)
49+
ordered = models.BooleanField(default=False)
1450
item = models.ForeignKey(Item, on_delete=models.CASCADE)
51+
quantity = models.IntegerField(default=1)
1552

1653
def __str__(self):
17-
return self.title
54+
return f"{self.quantity} of {self.item.title}"
1855

1956

2057
class Order(models.Model):

core/urls.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
from django.urls import path
22
from .views import (
3-
products,
3+
ItemDetailView,
44
checkout,
5-
home
5+
HomeView,
6+
add_to_cart,
7+
remove_from_cart
68
)
79

810
app_name = 'core'
911

1012
urlpatterns = [
11-
path('', home, name='home'),
13+
path('', HomeView.as_view(), name='home'),
1214
path('checkout/', checkout, name='checkout'),
13-
path('products/', products, name='products')
15+
path('product/<slug>/', ItemDetailView.as_view(), name='product'),
16+
path('add-to-cart/<slug>/', add_to_cart, name='add-to-cart'),
17+
path('remove-from-cart/<slug>/', remove_from_cart, name='remove-from-cart')
1418
]

0 commit comments

Comments
 (0)