天天生鲜—创建数据库
一、分析需求,得到表之間的關(guān)聯(lián)
說(shuō)明:創(chuàng)建數(shù)據(jù)庫(kù)之前應(yīng)該有一個(gè)需求分析的過(guò)程,這個(gè)過(guò)程主要是依據(jù)需求方的需求文檔,進(jìn)行分析,需要什么功能,實(shí)現(xiàn)這些功能需要哪些表,表與表之間的關(guān)聯(lián)如何,以及實(shí)現(xiàn)一些功能時(shí)需要用到哪些技術(shù),都需要在這個(gè)步驟分析清楚。
二、依據(jù)表的分析,創(chuàng)建數(shù)據(jù)庫(kù),表
1、創(chuàng)建基類base_model
在項(xiàng)目目錄下創(chuàng)建python文件夾db—>創(chuàng)建python文件base_model.py——>創(chuàng)建基類,代碼如下:
2、user應(yīng)用下創(chuàng)建User表,直接繼承django自導(dǎo)的abstractUser類。
from django.contrib.auth.models import AbstractUser from db.base_model import BaseModel from django.db import modelsclass User(AbstractUser, BaseModel):"""這里是直接使用django自帶的user類"""class Meta:db_table = 'df_user'verbose_name_plural = verbose_name = '用戶'class AddressManager(models.Manager):'''地址模型管理器類'''# 1.改變?cè)胁樵兊慕Y(jié)果集:all()# 2.封裝方法:用戶操作模型類對(duì)應(yīng)的數(shù)據(jù)表(增刪改查)def get_default_address(self, user):'''獲取用戶默認(rèn)收貨地址'''# self.model:獲取self對(duì)象所在的模型類try:address = self.get(user=user, is_default=True) # models.Managerexcept self.model.DoesNotExist:# 不存在默認(rèn)收貨地址address = Nonereturn addressclass Address(BaseModel):'''地址模型類'''user = models.ForeignKey('User', verbose_name='所屬賬戶', on_delete=models.CASCADE)receiver = models.CharField(max_length=20, verbose_name='收件人')addr = models.CharField(max_length=256, verbose_name='收件地址')zip_code = models.CharField(max_length=6, null=True, verbose_name='郵政編碼')phone = models.CharField(max_length=11, verbose_name='聯(lián)系電話')is_default = models.BooleanField(default=False, verbose_name='是否默認(rèn)')# 自定義一個(gè)模型管理器對(duì)象objects = AddressManager()class Meta:db_table = 'df_address'verbose_name = '地址'verbose_name_plural = verbose_name3、order應(yīng)用下創(chuàng)建訂單信息表,訂單商品表,繼承Basemodel,·
from db.base_model import BaseModel from django.db import models# 這個(gè)是訂單相關(guān)的表:訂單信息表,訂單的商品表class OrderInfo(BaseModel):"""訂單信息表"""PAY_METHODS_CHOICE = ((1, '貨到付款'),(2, '微信支付'),(3, '支付寶'),(4, '銀聯(lián)支付'))ORDER_STATUS_CHOICE = ((1, '待支付'),(2, '待發(fā)貨'),(3, '待收貨'),(4, '待評(píng)價(jià)'),(5, '已完成'))order_id = models.IntegerField(primary_key=True, verbose_name='訂單id')address = models.ForeignKey('user.Address', on_delete=models.CASCADE, verbose_name='地址id')user = models.ForeignKey('user.User', on_delete=models.CASCADE, verbose_name='用戶id')pay_method = models.CharField(max_length=32, choices=PAY_METHODS_CHOICE, default=1, verbose_name='支付方式')total_count = models.IntegerField(verbose_name='總的數(shù)目')total_price = models.DecimalField(max_digits=128, decimal_places=0,verbose_name='總的金額') # max_digits:數(shù)字允許的最大位數(shù);decimal_places:小數(shù)的最大位數(shù)trans_price = models.DecimalField(max_digits=128, decimal_places=0, verbose_name='運(yùn)費(fèi)')order_status = models.CharField(max_length=32, choices=ORDER_STATUS_CHOICE, default=1, verbose_name='訂單狀態(tài)')trade_no = models.IntegerField(verbose_name='支付編號(hào)')class Meta:db_table = 'df_order_info'verbose_name_plural = verbose_name = '訂單'class OrderGoods(BaseModel):order = models.ForeignKey('OrderInfo', verbose_name='訂單', on_delete=models.CASCADE)sku = models.ForeignKey('goods.GoodsSKU', verbose_name='商品SKU', on_delete=models.CASCADE)count = models.IntegerField(default=1, verbose_name='商品數(shù)目')price = models.DecimalField(max_digits=12, decimal_places=2, verbose_name='商品價(jià)格')comment = models.CharField(max_length=256, default='', verbose_name='評(píng)論')class Meta:db_table = 'df_order_goods'verbose_name_plural = verbose_name = '訂單商品'4、goods應(yīng)用下創(chuàng)建商品類型表,商品SKU表,商品SPU表,商品圖片表,首頁(yè)輪播商品表,首頁(yè)分類商品展示表,首頁(yè)促銷活動(dòng)表,繼承Basemodel數(shù)據(jù)庫(kù)基類。
from django.db import models from tinymce.models import HTMLField from db.base_model import BaseModelclass GoodsType(BaseModel):"""商品模型類"""name = models.CharField(max_length=32, verbose_name='種類名稱')logo = models.CharField(max_length=32, verbose_name='標(biāo)識(shí)')image = models.ImageField(upload_to='type', verbose_name='商品類型圖片')class Meta:db_table = 'df_goods_type'verbose_name_plural = verbose_name = '商品種類'class GoodsSKU(BaseModel):"""商品SKU表"""STATUS_CHOICE = ((0, '下線'), (1, '上線'))type = models.ForeignKey('GoodsType', verbose_name='商品種類',on_delete=models.CASCADE)goods = models.ForeignKey('Goods', verbose_name='商品名稱',on_delete=models.CASCADE)name = models.CharField(max_length=20, verbose_name='商品名稱')desc = models.CharField(max_length=256, verbose_name='商品簡(jiǎn)介')price = models.DecimalField(max_digits=32,decimal_places=0, verbose_name='商品價(jià)格')unite = models.IntegerField(verbose_name='商品單位')image = models.ImageField(upload_to='goods', verbose_name='商品圖片')stock = models.IntegerField(verbose_name='商品庫(kù)存')sales = models.IntegerField(default=0, verbose_name='商品銷量')status = models.CharField(max_length=32,default=1, choices=STATUS_CHOICE, verbose_name='商品狀態(tài)')class Meta:db_table = 'df_goods_sku'verbose_name_plural = verbose_name = '商品'class Goods(BaseModel):"""商品SPU模型"""name = models.CharField(max_length=56, verbose_name='商品名稱')detail = HTMLField(blank=True, verbose_name='商品詳情')class Meta:db_table = 'df_goods'verbose_name_plural = verbose_name = '商品SKU'class GoodsImage(BaseModel):"""商品圖片"""sku = models.ForeignKey('GoodsSKU', verbose_name='商品',on_delete=models.CASCADE)image = models.ImageField(upload_to='goods', verbose_name='圖片路徑')class Meta:db_table = 'df_goods_image'verbose_name_plural = verbose_name = '商品圖片'class IndexGoodsBanner(BaseModel):"""首頁(yè)輪播商品展示"""sku = models.ForeignKey('GoodsSKU',on_delete=models.CASCADE)image = models.ImageField(upload_to='banner', verbose_name='圖片')index = models.SmallIntegerField(default=0, verbose_name='展示順序')class Meta:db_table = 'df_index_banner'verbose_name_plural = verbose_name = '首頁(yè)輪播商品'class IndexTypeGoodsBanner(BaseModel):"""首頁(yè)分類商品展示模型"""DISPLAY_TYPE_CHOICE = ((0, '標(biāo)題'), (1, '圖片'))type = models.ForeignKey('GoodsType', verbose_name='商品類型',on_delete=models.CASCADE)sku = models.ForeignKey('GoodsSKU', verbose_name='商品SKU',on_delete=models.CASCADE)display_type = models.CharField(max_length=56,default=1, choices=DISPLAY_TYPE_CHOICE, verbose_name='展示類型')index = models.SmallIntegerField(default=0, verbose_name='展示順序') # 1,2,3,4class Meta:db_table = 'df_index_type_goods'verbose_name_plural = verbose_name = '主頁(yè)分類展示商品'class IndexPromotionBanner(BaseModel):"""首頁(yè)促銷活動(dòng)模型"""name = models.CharField(max_length=32, verbose_name='活動(dòng)名稱')url = models.URLField(max_length=256, verbose_name='活動(dòng)鏈接')image = models.ImageField(upload_to='banner', verbose_name='活動(dòng)圖片')index = models.SmallIntegerField(default=0, verbose_name='展示順序')class Meta:db_table = 'df_index_promotion'verbose_name_plural = verbose_name = '主頁(yè)促銷活動(dòng)'5、cart 應(yīng)用下,無(wú)需創(chuàng)建模型
自此,模型來(lái)創(chuàng)建完成
三、 數(shù)據(jù)庫(kù)遷移
*說(shuō)明:*這里使用的數(shù)據(jù)庫(kù)是sqllite,所以就直接遷移就好,
我運(yùn)用的事django自帶的認(rèn)證系統(tǒng),所以在setting.py 配置文件中要加入
1、生成模型:python manage.py make migrations
2、遷移指令:python manage.py migrate
遷移成功
總結(jié)
以上是生活随笔為你收集整理的天天生鲜—创建数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是计算机网络教学反思,《计算机网络实
- 下一篇: mysql 查询语句性能优化