前十四章节已经介绍了如何用django来建立一个信息系统,解决了增删改查的问题。那么接下来,为了适应工作需要,我们在此建立一个简单的项目协作留言板功能。项目留言板可以通过新建项目,同时大家可以在项目留言板上留言,来互相协作。
-
设计留言板的功能
留言板主要分为项目和实施步骤。一个项目对应多个步骤,所以是一对多的关系。同时,允许上传附件,而一个项目也对应多个附件,所以与附件的关系也是一对多的关系。而一个项目有多个人实施,一个人也会实施多个项目。因此,项目与人员的关系是多对多的关系。
2.建立相关模型
#建立职员模型,这是对内置user表的扩展
class Employee(models.Model):
#对应User表,建立一对一的模型,目的是更好地扩展而不影响原user表结构
user = models.OneToOneField(User, on_delete=models.CASCADE)
#定义user的职责
responsibility = models.CharField(max_length=100,blank=True)
def __unicode__(self):
return self.user.username
#建立任务表
class Task(models.Model):
#执行的任务和人员关系是多对多的关系
task_member = models.ManyToManyField(Employee)
#为任务类型分类
category = (
(U'综合事务','综合事务'),
(U'机构建设','机构建设'),
(U'线路事务','线路事务'),
)
#任务的流水号
task_code = models.CharField(max_length=30, default='error_code')
#任务的名称
task_title = models.CharField(verbose_name='任务名称',max_length=100)
#任务的分类
task_category = models.CharField(verbose_name='任务分类',max_length=100,choices=category,default='综合事务')
#任务的联系人
task_contacts = models.TextField(verbose_name='联系人',blank=True)
#任务状态
task_status = models.CharField(verbose_name='处理中',max_length=20,default='处理中')
#任务登记人
task_signer = models.CharField(max_length=30,default='system')
#任务登记时间
task_signtime = models.DateField(auto_now_add=True)
def __unicode__(self):
return self.task_title
#建立实施步骤
class Process(models.Model):
#与task表格是一对多的关系,依附于task之上
task = models.ForeignKey(Task)
#实施步骤内容
process_content = models.TextField(blank=True)
#实施步骤登记时间
process_signtime = models.DateTimeField(auto_now_add=True)
#实施步骤登记人
process_signer = models.CharField(max_length=30,default='system')
def __unicode__(self):
return self.process_content
#上传附件
class Upload(models.Model):
#与task表格是一对多的关系,依附于task之上
task = models.ForeignKey(Task)
#上传附件名称
upload_title = models.CharField(max_length=255)
#上传附件路径
upload_path = models.CharField(max_length=255)
#上传附件时间
upload_signtime = models.DateTimeField(auto_now_add=True,null=True)
def __unicode__(self):
return self.upload_title