Django ORM 实现电商商品管理:SKU、SPU、库存与促销活动关联
在电商系统中,商品管理是核心功能之一。一个完善的商品管理系统需要处理SKU(Stock Keeping Unit,库存量单位)、SPU(Standard Product Unit,标准产品单元)、库存以及促销活动等多个方面。Django ORM(Object-Relational Mapping)是Django框架提供的一种数据模型映射工具,它可以将Python对象映射到数据库中的表。本文将使用Django ORM实现一个电商商品管理系统,包括SKU、SPU、库存和促销活动的关联。
系统设计
数据模型设计
在Django中,我们首先需要定义相应的模型类。以下是电商商品管理系统的数据模型设计:
1. Category(商品类别)
- id:主键,自动递增
- name:类别名称
2. Brand(品牌)
- id:主键,自动递增
- name:品牌名称
3. SPU(标准产品单元)
- id:主键,自动递增
- name:产品名称
- category:外键,关联到Category模型
- brand:外键,关联到Brand模型
4. SKU(库存量单位)
- id:主键,自动递增
- spu:外键,关联到SPU模型
- title:SKU标题
- price:SKU价格
- stock:SKU库存
- cost_price:SKU成本价
- image:SKU图片
5. Promotion(促销活动)
- id:主键,自动递增
- name:促销活动名称
- description:促销活动描述
- start_time:促销活动开始时间
- end_time:促销活动结束时间
- discount:折扣率
6. SKU_Promotion(SKU与促销活动关联)
- id:主键,自动递增
- sku:外键,关联到SKU模型
- promotion:外键,关联到Promotion模型
- discount:折扣率
模型代码实现
python
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Brand(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class SPU(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
def __str__(self):
return self.name
class SKU(models.Model):
spu = models.ForeignKey(SPU, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
price = models.DecimalField(max_digits=10, decimal_places=2)
stock = models.IntegerField()
cost_price = models.DecimalField(max_digits=10, decimal_places=2)
image = models.ImageField(upload_to='sku_images/')
def __str__(self):
return self.title
class Promotion(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
start_time = models.DateTimeField()
end_time = models.DateTimeField()
discount = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.name
class SKU_Promotion(models.Model):
sku = models.ForeignKey(SKU, on_delete=models.CASCADE)
promotion = models.ForeignKey(Promotion, on_delete=models.CASCADE)
discount = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return f"{self.sku.title} - {self.promotion.name}"
关联查询
在实际应用中,我们可能需要查询与SKU相关的促销活动信息。以下是一个示例查询:
python
from django.db.models import Prefetch
获取所有SKU及其关联的促销活动
sku_list = SKU.objects.prefetch_related('sku_promotion__promotion').all()
for sku in sku_list:
print(f"SKU: {sku.title}, Promotion: {sku.sku_promotion.promotion.name}, Discount: {sku.sku_promotion.discount}")
总结
本文介绍了使用Django ORM实现电商商品管理系统的过程,包括SKU、SPU、库存和促销活动的关联。通过定义相应的模型类和关联关系,我们可以方便地管理电商商品数据。在实际开发中,还可以根据需求添加更多的功能和优化,以满足不同业务场景的需求。
Comments NOTHING