Skip to content

Commit

Permalink
✨ [#1] Added Product, Order and OrderProduct models
Browse files Browse the repository at this point in the history
  • Loading branch information
ErhanCitil committed Oct 4, 2023
1 parent 2eecddd commit 52c92b5
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
48 changes: 48 additions & 0 deletions src/bobvance/base/migrations/0002_order_orderproduct_product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Generated by Django 3.2.21 on 2023-10-04 13:15

import django.core.validators
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('base', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='Order',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.CharField(choices=[('In_progress', 'In progress'), ('Shipped', 'Shipped'), ('Delivered', 'Delivered'), ('Cancelled', 'Cancelled')], default='In_progress', max_length=50)),
('created_at', models.DateTimeField(auto_now_add=True)),
('customer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='base.customer')),
],
),
migrations.CreateModel(
name='Product',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=50)),
('price', models.DecimalField(decimal_places=2, max_digits=5)),
('description', models.TextField()),
('image', models.ImageField(upload_to='product_img/')),
('new', models.BooleanField(default=True)),
],
),
migrations.CreateModel(
name='OrderProduct',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('quantity', models.PositiveIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)])),
('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='order_products', to='base.order')),
('product', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='order_products', to='base.product')),
],
options={
'ordering': ['order'],
'unique_together': {('order', 'product')},
},
),
]
44 changes: 44 additions & 0 deletions src/bobvance/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
from phonenumber_field.modelfields import PhoneNumberField
from localflavor.nl.models import NLZipCodeField

from django.core.validators import MinValueValidator

# Create your models here.
class Customer(models.Model):
firstname = models.CharField(max_length=50)
Expand All @@ -15,3 +17,45 @@ class Customer(models.Model):

def __str__(self):
return f"{self.firstname} {self.lastname}"

class Product(models.Model):
name = models.CharField(max_length=50)
price = models.DecimalField(max_digits=5, decimal_places=2)
description = models.TextField()
image = models.ImageField(upload_to='product_img/')
new = models.BooleanField(default=True)

def __str__(self):
return self.name

IN_PROGRESS = 'In_progress'
SHIPPED = 'Shipped'
DELIVERED = 'Delivered'
CANCELLED = 'Cancelled'

ORDER_STATUS_CHOICES = (
(IN_PROGRESS, 'In progress'),
(SHIPPED, 'Shipped'),
(DELIVERED, 'Delivered'),
(CANCELLED, 'Cancelled'),
)

class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
status = models.CharField(max_length=50, choices=ORDER_STATUS_CHOICES, default=ORDER_STATUS_CHOICES[0][0])
created_at = models.DateTimeField(auto_now_add=True)

def __str__(self):
return f"{self.customer} - {self.status}"

class OrderProduct(models.Model):
order = models.ForeignKey(Order, related_name='order_products',on_delete=models.CASCADE)
product = models.ForeignKey(Product, related_name='order_products', on_delete=models.CASCADE)
quantity = models.PositiveIntegerField(default=1, validators=[MinValueValidator(1)])

def __str__(self):
return f"{self.product.name} - {self.quantity}x"

class Meta:
unique_together = ['order', 'product']
ordering = ['order']

0 comments on commit 52c92b5

Please sign in to comment.