Creating Orders apps for Order processing - lhmisho/django-eCommerce GitHub Wiki
Create Order Apps
myProj/
django-admin startapp orders
Register Apps to settings
myProj/settings.py
INSTALLED_APPS = [
..............
'orders',
............
]
Create Order model
orders/models.py
from django.db import models
from django.db.models.signals import pre_save
from eshop.utils import unique_order_id_generator
from carts.models import Cart
# Create your models here.
ORDER_STATUS_CHOICE = (
('created', 'CREATED'),
('paid', 'PAID'),
('shipped', 'SHIPPING'),
('refounded', 'REFOUNDED')
)
class Order(models.Model):
order_id = models.CharField(max_length=120, blank=True)
#billing_profile =
#shipping_address =
#billing_address =
cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
status = models.CharField(max_length=120, default='created', choices=ORDER_STATUS_CHOICE)
shipping_total = models.DecimalField(default=5.99, max_digits=100, decimal_places=2)
total = models.DecimalField(default=0.00, max_digits=100, decimal_places=2)
def __str__(self):
return self.order_id
# using pre_save singnals with unique_order_generator for saving the unique order id
def pre_save_order_id(sender, instance, *args, **kewarg):
if not instance.order_id:
instance.order_id = unique_order_id_generator(instance)
pre_save.connect(pre_save_order_id , sender=Order)
Register your model on admin
orders/admin.py
from django.contrib import admin
from .models import Order
# Register your models here.
admin.site.register(Order)
Create Unique Id generator for unique id generate
myProj/utils.py In my case it's eshop/utils.py
# link for slug generator:- https://www.codingforentrepreneurs.com/blog/a-unique-slug-generator-for-django/
# link for random string generator:- https://www.codingforentrepreneurs.com/blog/random-string-generator-in-python/
import random
import string
from django.utils.text import slugify
#################### this portion for generating unique random string #############################
def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
################## Main portion for generating unique order_id #################################
# creating unique order id for order apps
def unique_order_id_generator(instance):
"""
This is for generating unique order_id for order processing on orders/models.py
"""
new_order_id = random_string_generator().upper() # key : 1DSWA3FG somthing like that
Klass = instance.__class__
qs_exists = Klass.objects.filter(order_id=new_order_id).exists()
if qs_exists:
return unique_slug_generator(instance)
return new_order_id
##############################################################################################
############## This portion for generating unique slug for products section ###########################
def unique_slug_generator(instance, new_slug=None):
"""
This is for django project with and it's assume that your
instance has a model with a slug field and title character (char) field
"""
if new_slug is not None:
slug = new_slug
else:
slug = slugify(instance.title)
Klass = instance.__class__
qs_exists = Klass.objects.filter(slug=slug).exists()
if qs_exists:
new_slug = "{slug}-{randstr}".format(
slug=slug,
randstr=random_string_generator(size=4)
)
return unique_slug_generator(instance, new_slug=new_slug)
return slug