1. 程式人生 > 實用技巧 >碼農和規矩

碼農和規矩

1.表結構分析

1.1 商品模組表結構分析

from django.db import models

# Create your models here.


class Base(models.Model):
    create_time = models.TimeField(auto_now_add=True)
    update_time = models.TimeField(auto_now=True)

    class Meta:
        abstract = True

# 商品表
class Goods(Base):
    GOODS_TYPE = (
        ('1','Vip'),
        ('2','Course'),
    )
    CHANNEL_TYPE =(
        ('1','普通'),
        ('2','促銷')
    )

    course = models.ForeignKey('course.Course',on_delete=models.PROTECT)
    goods_type = models.CharField(choices=GOODS_TYPE,max_length=8)
    produce_id = models.CharField('商品id',max_length=8)
    title = models.CharField('商品名稱',max_length=24)
    price = models.DecimalField('商品價格',max_digits=8,decimal_places=2)
    channel_type = models.CharField('購買渠道',choices=CHANNEL_TYPE,max_length=8)
    period = models.CharField('購買渠道',max_length=365)
    is_launched = models.BooleanField(default=True)

    class Meta:
        db_table = 'goods'

    def __str__(self):
        return self.title

# 訂單表
class Order(Base):
    PAY_METHOD = (
        (1, "支付寶"),
    )
    ORDER_STATUS=(
        (1, "待支付"),
        (2, "已支付"),
        (3, "已取消"),
    )
    user = models.ForeignKey('app01.User',on_delete=models.PROTECT)
    goods = models.ForeignKey(Goods,on_delete=models.PROTECT)
    order_id = models.CharField(max_length=24)
    trade_no = models.CharField(max_length=32,null=True)
    pay_time = models.DateTimeField(null=True)
    pay_method = models.CharField('支付方式', choices=PAY_METHOD, default=1, max_length=8)
    status = models.CharField('支付狀態', choices=ORDER_STATUS, default=1, max_length=8)
    total_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品總金額")

    class Meta:
        db_table = 'tb_orders'

    def __str__(self):
        return self.order_id


# 使用者購買課程
class User_Course(Base):
    user = models.ForeignKey('app01.User', on_delete=models.CASCADE, default=None, related_name='payuser')
    course = models.ForeignKey('course.Course', on_delete=models.CASCADE, related_name='paycourse',default=None)

    class Meta:
        db_table = 'usercourse'

1.3 user/models.py新增VIP表並新增使用者關聯

class Vip(Base):
    vip_choise = (
        ('0', '普通使用者'),
        ('1', '普通會員'),
        ('2', '高階會員'),
    )
    title = models.CharField('vip名稱', max_length=16)
    vip_type = models.CharField('Vip種類', choices=vip_choise, max_length=4)
    desc = models.CharField('vip描述', max_length=255)
    period = models.IntegerField('有效期', default=365)

    class Meta:
        db_table = 'tb_vip'

    def __str__(self):
        return self.title


class User(AbstractUser):

    phone = models.CharField('手機號', max_length=20)
    img = models.ImageField(upload_to='user', null=True, blank=True)
    nick_name = models.CharField('暱稱', max_length=20)	
    address = models.CharField('地址', max_length=255)
    vip = models.ForeignKey(Vip, on_delete=models.SET_NULL, default=None, null=True)
    vip_expiration = models.DateField('vip到期時間', blank=True, default=None, null=True)

    class Meta:
        db_table = 'tb_user'
        verbose_name_plural = '使用者'

2.在admin中註冊

2.1在goods/admin.py中註冊

from django.contrib import admin
from .models import *
# Register your models here.


for model in [Goods,Order]:
    admin.site.register(model)

2.2 在user/admin.py中註冊

from django.contrib import admin
from .models import User,Vip
# Register your models here.



admin.site.register(User)
admin.site.register(Vip)