就我个人而言,我觉得任何项目的最重要的事情就是数据库的设计,这是支撑着所有的功能的最底层的支持。那么这篇文章我们继续上文,开始搭建我们的数据库。
a.设计
我们需要明白我们想要的项目到底是个什么效果,数据库中各个表之间的关系?一对一,一对多,还是多对多?
让我们来理清思路,我们首先需要多少数据表。
由于权限功能我们所使用的Django框架自己有携带,所以我们不用操心这个最复杂的表,只需要考虑如图所示的四个功能表。其中,最为重要的是表中字段的关系,即主键外键,例如:书籍表中的书本名-外键-借阅记录表的书本名;借阅人表的借阅人名-外键-借阅记录表的借阅人。可以看出其中的关系错综复杂,所以各位读者在开始编写代码构建数据库的结构时一定要理清楚思路与业务逻辑。
在这里我放出本次项目的各个表所需要的字段,当然,这是我所做的最基础的,具体设计需要各位读者根据自己的项目需要来调整:
书籍表:
作者表:
借阅记录表:
借阅人:
b.代码
具体的项目代码介绍大家可以看我的专栏Django中的ORM操作来具体了解,在这里我仅仅给出代码:
from django.db import models
# Create your models here.
#书籍模型
class book(models.Model):
book_name = models.CharField(verbose_name="书籍名称", max_length=20,unique=True)
author = models.ForeignKey(verbose_name="作者",to='author', to_field='id', on_delete=models.CASCADE,default=None)
book_price = models.DecimalField(verbose_name='书本价格', max_digits=10, decimal_places=2)
book_img = models.ImageField(verbose_name="书籍封面", default='none',upload_to='book')
book_info = models.CharField(verbose_name='书籍简介', max_length=500, default='none')
book_press = models.CharField(verbose_name='书籍出版社', max_length=50)
book_time = models.DateField(verbose_name='书籍出版时间')
book_address = models.CharField(verbose_name='书籍所在',max_length=20)
book_status = models.CharField(verbose_name="书本状态",choices=(("0","下架"),("1","在架")),max_length=20,default="0")
create_time = models.DateTimeField(verbose_name="数据创建时间", auto_now_add=True)
alter_time = models.DateTimeField(verbose_name='数据修改时间', auto_now=True)
class Meta:
db_table = "book"
verbose_name = "书籍管理"
verbose_name_plural = '书籍管理'
def __str__(self):
return self.book_name
#作者模型
class author(models.Model):
author_name = models.CharField(verbose_name="作者姓名", max_length=20)
author_age = models.IntegerField(verbose_name="年龄")
class Meta:
db_table = "author"
verbose_name = "作者管理"
verbose_name_plural = '作者管理'
def __str__(self):
return self.author_name
#借阅人模型
class taker(models.Model):
taker_name = models.CharField(verbose_name="借阅人姓名",max_length=20,unique=True)
taker_number = models.IntegerField(verbose_name="借阅人ID",default='0000')
taker_identity = models.CharField(verbose_name="借阅人身份",choices=(("0","学生"),("1","教师")),max_length=20,default="0")
class Meta:
db_table = "taker"
verbose_name = "借阅人管理"
verbose_name_plural = '借阅人管理'
def __str__(self):
return self.taker_name
#借阅记录模型
class bore(models.Model):
bore_taker_name = models.ForeignKey(verbose_name='借阅人',to='taker',to_field='id',on_delete=models.CASCADE,default='挂失')
bore_book_name = models.ForeignKey(verbose_name='借阅书名',to='book',to_field='id',on_delete=models.CASCADE,default='挂失')
bore_lend_time = models.DateTimeField(verbose_name="借出时间")
bore_back_time = models.DateTimeField(verbose_name='归还时间')
bore_status = models.CharField(verbose_name='归还状态',choices=(("0","已归还"),("1","未归还")),max_length=20,default="1")
class Meta:
db_table = "bore"
verbose_name = "借阅记录管理"
verbose_name_plural = '借阅记录管理'
def __str__(self):
return self.bore_status
这只是初版代码,在后期根据具体的项目功能会再进行调整,所以各位读者请不要直接粘贴复制。