主要实体有:
用户
用户ID:唯一标识用户的主键
用户名:用户名
用户邮箱:用户的电子邮箱地址
用户手机号码:用户的联系电话
用户密码:用户的登录密码
用户注册时间:用户注册商城的时间
用户地址
商品
订单
订单ID:唯一标识订单的主键
用户ID:关联到用户的ID
订单状态:订单的当前状态(如待支付、已支付、已发货、已完成、已取消)
订单总金额:订单的总价值
订单下单时间:订单创建的时间
订单详情
详情ID:唯一标识订单详情的主键
订单ID):关联到订单的ID
商品ID:关联到商品的ID
数量:订单中商品的数量
单价:商品在订单中的销售价格
评论
评论ID:唯一标识商品评论的主键
用户ID:关联到用户的ID
商品ID:关联到商品的ID
评分:用户对商品的评分
评论内容:用户对商品的评论内容
评论时间:用户对商品的评论时间
购物车
购物车ID:购物车的唯一标识符
用户ID:关联到创建购物车的用户的唯一标识符
总价:购物车中所有商品的总价值
购物车项
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
用户ID | INT | 12 | PRIMARY KEY |
用户名 | VARCHAR | 255 | NOT NULL,UNIQUE |
用户邮箱 | VARCHAR | 255 | NOT NULL,UNIQUE |
用户手机号码 | VARCHAR | 11 | NOT NULL,UNIQUE |
用户密码 | VARCHAR | 60 | NOT NULL |
用户注册时间 | DATETIME | DEFAULT CURRENT_TIMESTAMP |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
收件地址ID | INT | 12 | PRIMARY KEY |
用户 | VARCHAR | 255 | NOT NULL,FOREIGN KEY |
收件人姓名 | VARCHAR | 255 | NOT NULL |
收件地址 | VARCHAR | 11 | NOT NULL |
收件人手机号 | VARCHAR | 60 | NOT NULL |
地区 | VARCHAR | 255 | NOT NULL |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
商品ID | INT | 12 | PRIMARY KEY |
商品名称 | VARCHAR | 255 | NOT NULL,UNIQUE |
商品描述 | TEXT | NOT NULL,UNIQUE | |
商品价格 | DECIMAL | (10, 2) | NOT NULL |
商品库存 | INT | 12 | NOT NULL |
商品图片 | VARCHAR | 255 | NOT NULL |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
订单ID | INT | 12 | PRIMARY KEY |
用户ID | INT | 12 | NOT NULL,FOREIGN KEY |
订单状态 | VARCHAR | 50 | NOT NULL |
订单总金额 | DECIMAL | (10, 2) | NOT NULL |
订单下单时间 | DATETIME | DEFAULT CURRENT_TIMESTAMP |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
详情ID | INT | 12 | PRIMARY KEY |
订单ID | INT | 12 | NOT NULL,FOREIGN KEY |
商品ID | INT | 12 | NOT NULL,FOREIGN KEY |
数量 | INT | 12 | NOT NULL |
商品单价 | DECIMAL | (10, 2) | NOT NULL |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
评论ID | INT | 12 | PRIMARY KEY |
用户ID | INT | 12 | NOT NULL,FOREIGN KEY |
商品ID | INT | 12 | NOT NULL,FOREIGN KEY |
评分 | DECIMAL | (3, 1) | NOT NULL,CHECK(评分 >= 1.0 AND 评分 <= 10.0) |
评论内容 | VARCHAR | 255 | NOT NULL |
评论时间 | DATETIME | DEFAULT CURRENT_TIMESTAMP |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
购物车ID | INT | 12 | PRIMARY KEY |
用户ID | INT | 12 | NOT NULL,FOREIGN KEY |
总价 | INT | 12 | NOT NULL |
字段名称 | 类型 | 长度 | 约束类型 |
---|---|---|---|
购物车项ID | INT | 12 | PRIMARY KEY |
购物车ID | INT | 12 | NOT NULL,FOREIGN KEY |
商品ID | INT | 12 | NOT NULL,FOREIGN KEY |
数量 | INT | 12 | NOT NULL |
from django.db import models
class User(models.Model):
user_id = models.AutoField(primary_key=True, unique=True, verbose_name="用户ID")
name = models.CharField(max_length=255, unique=True, null=False, verbose_name='用户名')
gender = models.CharField(max_length=255, null=False, verbose_name='用户性别')
email = models.EmailField(max_length=255, unique=True, null=False, verbose_name='用户邮箱')
mobile = models.CharField(max_length=11, unique=True, null=False, verbose_name='用户手机号码')
password = models.CharField(max_length=60, null=False, verbose_name='用户密码')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='用户注册时间')
def __str__(self):
return self.name
class Meta:
db_table = 'user'
class UserAddress(models.Model):
user_address_id = models.AutoField(primary_key=True, unique=True, verbose_name="收件地址ID")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='address', verbose_name="用户")
recipient_name = models.CharField(max_length=255, unique=True, null=False, verbose_name='收件人姓名')
recipient_address = models.CharField(max_length=255, null=False, verbose_name='收件地址')
recipient_mobile = models.CharField(max_length=11, null=False, verbose_name='收件人手机号')
district = models.CharField(max_length=255, null=False, verbose_name='地区')
def __str__(self):
return f"{self.recipient_name} - {self.recipient_address} - {self.recipient_mobile}"
class Meta:
db_table = 'user_address'
from django.db import models
class Goods(models.Model):
good_id = models.AutoField(primary_key=True, unique=True, verbose_name="商品ID")
type_id = models.IntegerField(default=1, null=False, verbose_name="商品类型ID")
name = models.CharField(max_length=255, unique=True, null=False, verbose_name='商品名称')
detail = models.CharField(max_length=255, unique=True, null=False, verbose_name='商品描述')
price = models.DecimalField(max_digits=10, decimal_places=2, null=False, verbose_name='商品价格')
stock = models.IntegerField(max_length=20, null=False, verbose_name='商品库存')
photo_URL = models.CharField(max_length=255, null=False, verbose_name='商品图片路径')
def __str__(self):
return f"{self.name} - {self.detail}"
class Meta:
db_table = 'goods'
from django.db import models
from apps.goods.models import Goods
from apps.user.models import User
class Comment(models.Model):
comment_id = models.AutoField(primary_key=True, unique=True, verbose_name="评论ID")
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comment')
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, related_name='comment')
score = models.IntegerField(null=False, default=0, verbose_name="评分")
content = models.TextField(verbose_name="评论内容")
comment_time = models.DateTimeField(auto_now_add=True, verbose_name='评论时间')
def __str__(self):
return f'{self.user.name} - {self.content[:5]}'
class Meta:
db_table = 'comment'
from django.db import models
from apps.goods.models import Goods
from apps.user.models import User
class Cart(models.Model):
cart_id = models.AutoField(primary_key=True, unique=True, verbose_name="购物车ID")
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="购物车总价")
def __str__(self):
return f'{self.user.name} - {self.total_price}'
class Meta:
db_table = 'cart'
class CartItem(models.Model):
cart_item_id = models.AutoField(primary_key=True, unique=True, verbose_name="购物车项ID")
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, related_name='item', verbose_name="购物车")
good = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name='商品')
num = models.IntegerField(default=0, verbose_name='数量')
def __str__(self):
return f'{self.good.name} - {self.num}'
class Meta:
db_table = 'cart_item'
from django.db import models
from apps.goods.models import Goods
from apps.user.models import User
class Order(models.Model):
order_id = models.AutoField(primary_key=True, unique=True, verbose_name="订单号")
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")
status = models.IntegerField(default=0, verbose_name="订单状态")
total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="订单总金额")
create_time = models.DateTimeField(auto_now_add=True, verbose_name='订单创建时间')
def __str__(self):
return f'{self.user.name} - {self.total_price}'
class Meta:
db_table = 'order'
class OrderDetail(models.Model):
order_detail_id = models.AutoField(primary_key=True, unique=True, verbose_name="订单详情ID")
order = models.ForeignKey(Order, on_delete=models.CASCADE, related_name='detail', verbose_name='订单')
goods = models.ForeignKey(Goods, on_delete=models.CASCADE, verbose_name='商品')
num = models.IntegerField(default=0, verbose_name="商品数量")
price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品单价")
def __str__(self):
return f'{self.goods.name} - {self.price}'
python manage.py makemigrations
python manage.py migrate
git init
git add .
git commit -m "京西商城项目的创建以及models类的编写"
git remote add origin 远程仓库地址
git push -u origin "master"
gitee链接:jignxi_shop_project: 个人开发的模仿京东商城的前后端分离项目——京西商城,后端使用django+django-rest-framework,前端使用 vue+ElementUI (gitee.com)
本人也处于学习阶段,若有错误与不足请指出,关注DPT一起进步吧!!!