基于Django的电子商务网站开发(连载9)

2023-09-20 18:11:34 浏览数 (1)

3.2 数据Model设计

根据第3.1节的需求,进行数据模型的设计,系统关联(ER)图如图3-1所示。

图3-1 电子商务系统的系统关联图(ER)

在这里建立了五个对象,分别是用户(User)、地址(Address)、商品(Goods)、单个订单(Order)和总订单(Orders)。

(1)一个用户对应多个地址,一个地址对应一个用户,所以【用户,地址】是一对多的关系,需要在地址表中建立包含指向用户表的外键。

(2)一个地址对应多个总订单,一个总订单对应一个地址,所以【地址,总订单】是一对多的关系,需要在总订单表中建立包含指向地址表的外键。

(3)一个用户对应多个订单,一个订单对应一个用户,所以【用户,订单】是一对多的关系,需要在订单表中建立包含指向用户表的外键。

(4)一个商品对应多个单个订单,一个单个订单对应一个商品,所以【商品,单个订单】是一对多的关系,需要在单个订单表中建立包含指向商品的外键。

(5)一个总订单对应多个单个订单,一个单个订单对应一个总订单,所以【总订单,单个订单】是一对多的关系,需要在单个订单表中建立包含指向总订单的外键。

根据上述分析,建立如下model.py文件。

from django.db import models # Create your models here.#用户class User(models.Model): username = models.CharField(max_length=50) #用户名 password = models.CharField(max_length=50) #密码 email = models.EmailField() #Email def __str__(self): return self.username #商品class Goods(models.Model): name = models.CharField(max_length=100) #商品名称 price = models.FloatField() #单价 picture = models.FileField(upload_to = './upload/') #图片 desc = models.TextField() #描述 def __str__(self): return self.name #收货地址class Address(models.Model): user = models.ForeignKey(User) #关联用户id address = models.CharField(max_length=50) #地址 phone = models.CharField(max_length=15) #电话 def __str__(self): return self.address #总订单class Orders(models.Model): address = models.ForeignKey(Address) #关联送货地址id create_time = models.DateTimeField(auto_now=True) #创建时间 status = models.BooleanField() #订单状态 def __str__(self): return self.create_time #单个订单class Order(models.Model): order = models.ForeignKey(Orders) #关联总订单id user = models.ForeignKey(User) #关联用户id goods = models.ForeignKey(Goods) #关联商品id count = models.IntegerField() #数量

Goods表中picture使用的是models.FileField(upload_to ='./upload/'),也可以用ImageField,由于goods是后台管理人员操作的,为了提高上传图片的性能所以没有使用ImageField来管理。upload_to = './upload/'表示图片上传后,放入名为upload的路径,upload路径是与goods平行的。这样需要在urls.py中加入。

...url(r'^static/(?P<path>.*)',static.serve,{'document_root':os.path.join(BASE_DIR,'upload')}),…...

这样通过后台上传的图片文件自动存在BASE_DIRupload下面,通过<imagesrc='/upload/...jpg'>来显示相应的图片(注意upload前必须由字符‘/’)

0 人点赞