前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-优惠券系统设计

Django实战-优惠券系统设计

作者头像
小团子
发布2019-10-09 15:40:29
1.3K0
发布2019-10-09 15:40:29
举报
文章被收录于专栏:数据云团

Django实战-调查问卷表设计

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

应用场景:某一在线教育网,需要为每位积极客户发一些观看视频的优惠券,但是,对于不同类型的视频,优惠券是不同。

比如:有一个普通课程,需要发一些满200减30的优惠券,而又有精品课程,需要发满100减70的优惠券。

根据以上需求,很快就知道,需要三张表,学位课程表,课程表以及优惠券表,那么,这三张表又是如何关联的呢?

代码语言:javascript
复制
# A 学位课程表结构
#  ID     名称
#  1    学位课1
#  2    学位课2
代码语言:javascript
复制
# B 普通课程表
#ID    名称
#1    普通课1
#2    普通课2
代码语言:javascript
复制
# 优惠券表
#ID     优惠券名称     A(FK)         B(FK)
#1       通用优惠券    null           null  # 两个都为空,说明全场都可以使用
#2       满100-10      1             null  # 给学位课程创建优惠券
#3       满200-30     null            1    # 给普通课程创建优惠券

再来一种课程,上面的优惠券表还需要额外新增一列,为了解决这个问题,可以使用ContentType类来实现上述需求。

代码语言:javascript
复制
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
代码语言:javascript
复制
class DegreeCourse(models.Model):
    """学位课程
     ID    名称
     1    学位课1
     2    学位课2
    """
    name = models.CharField(max_length=128, unique=True)

    x1 = GenericRelation("Coupon")

class Course(models.Model):
    """课程
     ID    名称
     1    普通课1
     2    普通课2
    """
    name = models.CharField(max_length=128, unique=True)
    
    x1 = GenericRelation("Coupon")

class Coupon(models.Model):
    """优惠券生成规则
    ID     优惠券名称                A FK                  B FK           c.FK
     1       通用                 null                    null
     2       满100-10               8                      1
     3       满200-30               8                      2
     4       满200-30               9                      1

    ID     优惠券名称         content_type_id(表)         object_id(表中数据ID)
     1       通用                 null                    null
     2       满100-10               8                      1
     3       满200-30               8                      2
     4       满200-30               9                      1
    
    """
    name = models.CharField(max_length=64, verbose_name="活动名称")
    brief = models.TextField(blank=True, null=True, verbose_name="优惠券介绍")

    # 那个表?
    content_type = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.SET_NULL)
    # 对象ID
    object_id = models.PositiveIntegerField("绑定课程", blank=True, null=True, help_text="可以把优惠券跟课程绑定")

    content_object = GenericForeignKey('content_type', 'object_id')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档