目录
一、优惠券类别表结构设计
1-1 优惠券类别
- 用户个人贝利 - 可替代真实货币
- 全站优惠券
- 满减券 - 满100 -10券
- 立减券 - 不限额度立减10元
- 打折券 - 折扣95%
- 指定课程优惠券
- 满减券
- 立减券
- 打折券
1-2 表结构设计思路
- 贝利 - 用户信息表内单独字段
- 满减券 -最低消费字段 + 优惠金额字段
- 立减券 - 优惠金额字段
- 打折券 - 折扣百分比字段
1-3 表结构实现代码
class UserInfo(models.Model): name = models.CharField(max_length=64) pwd = models.CharField(max_length=64) # 用户贝里可替代真实金额 bely=models.IntegerField(default=100) def __str__(self): return self.name # -------------------优惠券相关-------------------- class Coupon(models.Model): ''' 优惠券生成规则 = 面向后台管理员 - 三种优惠券生成方式 -立减券 - money_equivalent_value 和 minimum_consume -满减券 = money_equivalent_value -折扣券 - off_percent - ContentType组件相关 - content_type:外键ContentType表,设置删除记录二者同时删除 - object_id - content_object:用于数据的查询和插入 ''' name = models.CharField(max_length=64, verbose_name="活动名称") brief = models.TextField(blank=True, null=True, verbose_name="优惠券介绍") coupon_type_choices = ((0, '立减券'), (1, '满减券'), (2, '折扣券')) coupon_type = models.SmallIntegerField(choices=coupon_type_choices, default=0, verbose_name="券类型") money_equivalent_value = models.IntegerField(verbose_name="等值货币", blank=True, null=True) off_percent = models.PositiveSmallIntegerField("折扣百分比", help_text="只针对折扣券,例7.9折,写79", blank=True, null=True) minimum_consume = models.PositiveIntegerField("最低消费", default=0, help_text="仅在满减券时填写此字段") content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.CASCADE) object_id = models.PositiveIntegerField("绑定课程", blank=True, null=True, help_text="可以把优惠券跟课程绑定") content_object = GenericForeignKey('content_type', 'object_id') quantity = models.PositiveIntegerField("数量(张)", default=1) open_date = models.DateField("优惠券领取开始时间") close_date = models.DateField("优惠券领取结束时间") valid_begin_date = models.DateField(verbose_name="有效期开始时间", blank=True, null=True) valid_end_date = models.DateField(verbose_name="有效结束时间", blank=True, null=True) coupon_valid_days = models.PositiveIntegerField(verbose_name="优惠券有效期(天)", blank=True, null=True, help_text="自券被领时开始算起") date = models.DateTimeField(auto_now_add=True) class Meta: verbose_name_plural = "31. 优惠券生成规则" def __str__(self): return "%s(%s)" % (self.get_coupon_type_display(), self.name) class CouponRecord(models.Model): """优惠券发放、消费纪录 - 面向用户""" # 跟优惠券生成规则是一对多的关系 - 一种优惠券有30张,则发放记录就有30条 coupon = models.ForeignKey("Coupon", on_delete=models.CASCADE) number = models.CharField(max_length=64) # 一对多,一个用户有多张优惠券,一张优惠券只能给一个用户 user = models.ForeignKey("UserInfo", verbose_name="拥有者", on_delete=models.CASCADE) status_choices = ((0, '未使用'), (1, '已使用'), (2, '已过期')) status = models.SmallIntegerField(choices=status_choices, default=0) get_time = models.DateTimeField(verbose_name="领取时间", help_text="用户领取时间") used_time = models.DateTimeField(blank=True, null=True, verbose_name="使用时间") class Meta: verbose_name_plural = "32. 优惠券发放、消费纪录" def __str__(self): return '%s-%s-%s' % (self.user, self.number, self.get_status_display())
二、结算页面
2-1 前端数据渲染需求
2-2 购物车数据