Django对不同数据库有很好的支持,但是不同数据库之间操作必然存在一些差异,为了解决这个差异性,Django使用统一的API方法来屏蔽不同数据库之间的差异性,这些API统称为ORM框架。
from django.db import models
# 项目应用commodity的models.py
class Types(models.Model):
# 对应商品类别表
id = models.AutoField(primary_key=True)
firsts = models.CharField('一级类型', max_length=100)
seconds = models.CharField('二级类型', max_length=100)
def __str__(self):
return str(self.id)
class Meta:
verbose_name = '商品类型'
verbose_name_plural = '商品类型'
class CommodityInfos(models.Model):
# 对应商品信息表
id = models.AutoField(primary_key=True)
name = models.CharField('商品名称', max_length=100)
sezes = models.CharField('商品规格', max_length=100)
types = models.CharField('商品类型', max_length=100)
price = models.FloatField('商品价格')
discount = models.FloatField('折后价格')
stock = models.IntegerField('库存数量')
sold = models.IntegerField('销售数量')
likes = models.IntegerField('收藏数量')
created = models.DateField('上架时间', auto_now_add=True)
img = models.FileField('商品主图', upload_to=r'imgs')
detail = models.FileField('商品介绍', upload_to=r'details')
def __str__(self):
return str(self.id)
class Meta:
verbose_name = '商品信息'
verbose_name_plural = '商品信息'
上面代码就是这二张表的信息。同理,可以设置其余二张表的信息
from django.db import models
STATE = (
('待支付', '待支付'),
('已支付', '已支付'),
('发货中', '发货中'),
('已签收', '已签收'),
('退货中', '退货中'),
)
class CartInfos(models.Model):
id = models.AutoField(primary_key=True)
quantity = models.IntegerField('购买数量')
commodityInfos_id = models.IntegerField('商品ID')
user_id = models.IntegerField('用户ID')
def __str__(self):
return str(self.id)
class Meta:
verbose_name = '购物车'
verbose_name_plural = '购物车'
class OrderInfos(models.Model):
id = models.AutoField(primary_key=True)
price = models.FloatField('订单总额')
created = models.DateField('创建时间', auto_now_add=True)
user_id = models.IntegerField('用户ID')
state = models.CharField('订单状态', max_length=20, choices=STATE)
def __str__(self):
return str(self.id)
class Meta:
verbose_name = '订单信息'
verbose_name_plural = '订单信息'
说明:
id = models.AutoField(primary_key=True) 一般用于主键
0001_initial.py文件将models.py文件定义的模型生成数据库表的脚步代码,可以被migrate指令执行,进而在数据库中生成相应的表。。
连接数据库测试时我们执行过这么一条代码:它是生成Django默认生成的数据表。在此执行这个指令并不会重复创建数据表。
python manage.py migrate
如果只想执行某个项目应用commondity 的migrations文件夹下某个.py文件,那么指令如下:
python manage.py migrate commodity 0001_initial