Skip to content

Commit d682fbb

Browse files
committed
set backend models and error on media url
1 parent c3fc51e commit d682fbb

12 files changed

+305
-4
lines changed

backend/Backend/settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,5 +96,11 @@
9696
USE_TZ = True
9797

9898
STATIC_URL = '/static/'
99+
STATICFILES_DIRS = [
100+
BASE_DIR / 'static'
101+
]
102+
103+
MEDIA_URL = '/images/'
104+
MEDIA_ROOT = 'static/images'
99105

100106
CORS_ALLOW_ALL_ORIGINS = True

backend/Backend/urls.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
from django.contrib import admin
22
from django.urls import path, include
3+
from django.conf import settings
4+
from django.conf.urls.static import static
35

46
urlpatterns = [
57
path('admin/', admin.site.urls),
68
path('api/', include('core.urls'))
79
]
10+
11+
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT),

backend/Pipfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ name = "pypi"
77
django = "*"
88
djangorestframework = "*"
99
django-cors-headers = "*"
10+
pillow = "*"
1011

1112
[dev-packages]
1213
django-linter = "*"

backend/Pipfile.lock

Lines changed: 40 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/core/admin.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,28 @@
11
from django.contrib import admin
22

3-
# Register your models here.
3+
from core.models import Order, OrderItem, Product, Review, ShippingAddress
4+
5+
6+
@admin.register(Product)
7+
class ProductAdmin(admin.ModelAdmin):
8+
pass
9+
10+
11+
@admin.register(Order)
12+
class OrderAdmin(admin.ModelAdmin):
13+
pass
14+
15+
16+
@admin.register(OrderItem)
17+
class OrderItemAdmin(admin.ModelAdmin):
18+
pass
19+
20+
21+
@admin.register(Review)
22+
class ReviewAdmin(admin.ModelAdmin):
23+
pass
24+
25+
26+
@admin.register(ShippingAddress)
27+
class ShippingAddressAdmin(admin.ModelAdmin):
28+
pass
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Generated by Django 3.1.7 on 2021-04-05 11:15
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+
initial = True
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name='Product',
19+
fields=[
20+
('_id', models.AutoField(editable=False, primary_key=True, serialize=False)),
21+
('name', models.CharField(blank=True, max_length=255, null=True, verbose_name='product name')),
22+
('brand', models.CharField(blank=True, max_length=255, null=True, verbose_name='product brand')),
23+
('category', models.CharField(blank=True, max_length=255, null=True, verbose_name='product category')),
24+
('description', models.TextField(blank=True, null=True)),
25+
('rating', models.DecimalField(decimal_places=2, max_digits=7)),
26+
('numReview', models.IntegerField(blank=True, default=0, null=True)),
27+
('price', models.DecimalField(decimal_places=2, max_digits=7)),
28+
('countInStock', models.IntegerField(blank=True, default=0, null=True)),
29+
('createdAt', models.DateTimeField(auto_now_add=True)),
30+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='product', to=settings.AUTH_USER_MODEL)),
31+
],
32+
options={
33+
'verbose_name': 'Product',
34+
'verbose_name_plural': 'Products',
35+
},
36+
),
37+
]
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# Generated by Django 3.1.7 on 2021-04-05 11:50
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', '0001_initial'),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name='Order',
18+
fields=[
19+
('paymentMethord', models.CharField(blank=True, max_length=255, null=True)),
20+
('taxPrice', models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)),
21+
('isPaid', models.BooleanField(default=False)),
22+
('isDeliverd', models.BooleanField(default=False)),
23+
('deliverdAt', models.DateTimeField(blank=True, null=True)),
24+
('createdAt', models.DateTimeField(auto_now_add=True)),
25+
('_id', models.AutoField(editable=False, primary_key=True, serialize=False)),
26+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='order', to=settings.AUTH_USER_MODEL)),
27+
],
28+
options={
29+
'verbose_name': 'Order',
30+
'verbose_name_plural': 'Orders',
31+
},
32+
),
33+
migrations.CreateModel(
34+
name='ShippingAddress',
35+
fields=[
36+
('address', models.CharField(blank=True, max_length=200, null=True)),
37+
('city', models.CharField(blank=True, max_length=200, null=True)),
38+
('postalCode', models.CharField(blank=True, max_length=200, null=True)),
39+
('country', models.CharField(blank=True, max_length=200, null=True)),
40+
('shippingPrice', models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)),
41+
('_id', models.AutoField(editable=False, primary_key=True, serialize=False)),
42+
('order', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='shippingaddress', to='core.order')),
43+
],
44+
),
45+
migrations.CreateModel(
46+
name='Review',
47+
fields=[
48+
('name', models.CharField(blank=True, max_length=255, null=True)),
49+
('rating', models.IntegerField(blank=True, default=0, null=True)),
50+
('comment', models.TextField(blank=True, null=True)),
51+
('_id', models.AutoField(editable=False, primary_key=True, serialize=False)),
52+
('product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='review', to='core.product')),
53+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='review', to=settings.AUTH_USER_MODEL)),
54+
],
55+
options={
56+
'verbose_name': 'Review',
57+
'verbose_name_plural': 'Reviews',
58+
},
59+
),
60+
migrations.CreateModel(
61+
name='OrderItem',
62+
fields=[
63+
('name', models.CharField(blank=True, max_length=200, null=True)),
64+
('qty', models.IntegerField(blank=True, default=0, null=True)),
65+
('price', models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)),
66+
('image', models.CharField(blank=True, max_length=200, null=True)),
67+
('_id', models.AutoField(editable=False, primary_key=True, serialize=False)),
68+
('order', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orderitem', to='core.order')),
69+
('product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='orderitem', to='core.product')),
70+
],
71+
),
72+
]
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 3.1.7 on 2021-04-05 11:54
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('core', '0002_order_orderitem_review_shippingaddress'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='product',
15+
name='image',
16+
field=models.ImageField(blank=True, null=True, upload_to=''),
17+
),
18+
]

backend/core/models.py

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,102 @@
1+
from django.contrib.auth.models import User
12
from django.db import models
23

3-
# Create your models here.
4+
5+
class Product(models.Model):
6+
_id = models.AutoField(editable=False, primary_key=True)
7+
user = models.ForeignKey(
8+
User, related_name='product', on_delete=models.CASCADE)
9+
name = models.CharField(
10+
max_length=255, verbose_name='product name', blank=True, null=True)
11+
image = models.ImageField(blank=True, null=True)
12+
brand = models.CharField(
13+
max_length=255, verbose_name='product brand', blank=True, null=True)
14+
category = models.CharField(
15+
max_length=255, verbose_name='product category', blank=True, null=True)
16+
description = models.TextField(null=True, blank=True)
17+
rating = models.DecimalField(max_digits=7, decimal_places=2)
18+
numReview = models.IntegerField(null=True, blank=True, default=0)
19+
price = models.DecimalField(max_digits=7, decimal_places=2)
20+
countInStock = models.IntegerField(null=True, blank=True, default=0)
21+
createdAt = models.DateTimeField(auto_now_add=True)
22+
23+
class Meta:
24+
verbose_name = "Product"
25+
verbose_name_plural = "Products"
26+
27+
def __str__(self):
28+
return self.name
29+
30+
31+
class Review(models.Model):
32+
product = models.ForeignKey(
33+
Product, on_delete=models.SET_NULL, null=True, related_name='review')
34+
user = models.ForeignKey(
35+
User, related_name='review', on_delete=models.CASCADE)
36+
name = models.CharField(max_length=255, blank=True, null=True)
37+
rating = models.IntegerField(null=True, blank=True, default=0)
38+
comment = models.TextField(null=True, blank=True)
39+
_id = models.AutoField(editable=False, primary_key=True)
40+
41+
class Meta:
42+
verbose_name = "Review"
43+
verbose_name_plural = "Reviews"
44+
45+
def __str__(self):
46+
return str(self.rating)
47+
48+
49+
class Order(models.Model):
50+
user = models.ForeignKey(
51+
User, related_name='order', on_delete=models.CASCADE)
52+
paymentMethord = models.CharField(max_length=255, blank=True, null=True)
53+
taxPrice = models.DecimalField(
54+
max_digits=7, decimal_places=2, blank=True, null=True)
55+
isPaid = models.BooleanField(default=False)
56+
createdAt = models.DateTimeField(auto_now_add=False, blank=True, null=True)
57+
isDeliverd = models.BooleanField(default=False)
58+
deliverdAt = models.DateTimeField(
59+
auto_now_add=False, null=True, blank=True)
60+
createdAt = models.DateTimeField(auto_now_add=True)
61+
_id = models.AutoField(editable=False, primary_key=True)
62+
63+
class Meta:
64+
verbose_name = "Order"
65+
verbose_name_plural = "Orders"
66+
67+
def __str__(self):
68+
return str(self.createdAt)
69+
70+
71+
class OrderItem(models.Model):
72+
product = models.ForeignKey(
73+
Product, related_name='orderitem',
74+
on_delete=models.SET_NULL, null=True)
75+
order = models.ForeignKey(
76+
Order, related_name='orderitem',
77+
on_delete=models.SET_NULL, null=True)
78+
name = models.CharField(max_length=200, null=True, blank=True)
79+
qty = models.IntegerField(null=True, blank=True, default=0)
80+
price = models.DecimalField(
81+
max_digits=7, decimal_places=2, null=True, blank=True)
82+
image = models.CharField(max_length=200, null=True, blank=True)
83+
_id = models.AutoField(primary_key=True, editable=False)
84+
85+
def __str__(self):
86+
return str(self.name)
87+
88+
89+
class ShippingAddress(models.Model):
90+
order = models.OneToOneField(
91+
Order, related_name='shippingaddress',
92+
on_delete=models.CASCADE, null=True, blank=True)
93+
address = models.CharField(max_length=200, null=True, blank=True)
94+
city = models.CharField(max_length=200, null=True, blank=True)
95+
postalCode = models.CharField(max_length=200, null=True, blank=True)
96+
country = models.CharField(max_length=200, null=True, blank=True)
97+
shippingPrice = models.DecimalField(
98+
max_digits=7, decimal_places=2, null=True, blank=True)
99+
_id = models.AutoField(primary_key=True, editable=False)
100+
101+
def __str__(self):
102+
return str(self.address)

backend/static/images/download2.jpeg

5.61 KB
Loading
5.61 KB
Loading

frontend/src/Pages/ProductPage.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ function ProductPage(props) {
2323
setProduct(data);
2424
}
2525
fetchProduct();
26-
});
26+
}, []);
2727
return (
2828
<Container>
2929
<LinkContainer to="/">

0 commit comments

Comments
 (0)