野外泛在线考核系统(八)

野外泛在线考核系统(八)

二、笔记本端

接(七),继续完成Django的相关配置

(六)数据库设计

这一段因为换了电脑(windows 10),所以,先大概记录下,这几天,主要是在解决数据库设计的问题,主要是依据课程考核的要求,结合课程内容科目,设计表格,完成各个表格的对应关系,有一对一,一对多,多对多。但这个设计不是一开始就全部设计好的,是通过试验,发现表格中存在的问题,而后一步步修改的,就是各个表格字段随时都可能改变,有时候是换名称,有时候是换类型,有时候是换对应关系,甚至有时候还好调整整个表格的结构。
就以项目评分表ItemScore为例,这个表中首先要明确项目名称item,还要明确编组team,(通过编组知道是哪些学生),还要有评分老师teacher,当然还要有评分结果itemScore。

  1. 被其他表格引用的值的设定,需要在def str(self):这个函数中体现,其返回值就是其他表格引用该表格所获得的值,而这个值必须是字符串,所以,需要把不是字符串的转换为字符串
    Lesson/model.py的文件中表ContentScore的字段item和team分别引用了表Item表Team,因为表Itemdef str(self):返回的是self.itemName,因此,在表ContentScore中字段item就会显示表Item字段itemName的值,同理,因为表Teamdef str(self):返回的是str(self.item)+str(self.teamOrder),因此,在表ContentScore中字段team就会显示表team字段item和字段teamOrder组合的值。
# Lesson/model.py
class ContentScore(models.Model):
    id = models.AutoField(primary_key=True)
    content = models.ForeignKey("Content", verbose_name='考核内容', on_delete=models.CASCADE)
    item = models.ForeignKey("Item", verbose_name='考核项目', on_delete=models.CASCADE)
    team = models.ForeignKey("Team", verbose_name='组别',on_delete=models.CASCADE)
    teacher = models.ForeignKey("Teacher", verbose_name='评分老师', on_delete=models.CASCADE)
    contentScore = models.DecimalField(verbose_name='内容成绩',max_digits=5, decimal_places=2)
    contentDate = models.DateField(verbose_name='考核日期', auto_now_add=True)
    def __str__(self):
        return str(self.contentScore)
    class Meta:
        verbose_name = '内容成绩'
        verbose_name_plural = '内容成绩'
# 被引用的表Item
class Item(models.Model):
    itemID = models.CharField(verbose_name='项目编号', unique=True, max_length=32)
    itemName = models.CharField(verbose_name='项目名称', max_length=32)
    itemWeight = models.DecimalField(verbose_name='项目权重', max_digits=5, decimal_places=2)
    teamMode = models.ForeignKey("TeamMode", verbose_name='分组模式', blank=True, on_delete=models.CASCADE)
    subject = models.ForeignKey("Subject", verbose_name='课目名称', on_delete=models.CASCADE)
    def __str__(self):
        return self.itemName
    class Meta:
        verbose_name = '项目详情'
        verbose_name_plural = '项目详情' 
# 被引用的表Team      
class Team(models.Model):
    teamID = models.CharField(verbose_name='分组编号', unique=True, max_length=32)
    item = models.ForeignKey("Item", verbose_name='项目名称', null=True, on_delete=models.CASCADE)
    teamOrder = models.SmallIntegerField(verbose_name='分组序号')
    teamDate = models.DateField(verbose_name='分组日期', null=True, auto_now_add=True)
    def teamName(self):
        return (str(self.item)+str(self.teamOrder))
    def __str__(self):
        return self.teamName()
    class Meta:
        verbose_name = '考核分组'
        verbose_name_plural = '考核分组'

如下图所示,组别就是显示的字段item(项目名称)和字段teamOrder(分组序号)组合的值
在这里插入图片描述

在这里插入图片描述

  1. 当需要数据迁移出错是,需要导出数据,需要使用命令
# 这个应用的导出
python manage.py dumpdata Lesson>data.json
# 只导出应用的某个表
python manage.py dumpdata Lesson.student>student.json
  1. 如果要导入数据
# 这个应用的导出
python manage.py loaddata data.json
#只导出应用的某个表
python manage.py loaddata student.json
  1. 如果要使用mysql 查看数据表需要使用如下命令:
    首先 登录mysql
~$ mysql -u root -p

而后显示所有数据库

mysql> show databases;

接着使用数据库

mysql> use qbpb;

而后显示该数据库下所有表

mysql> show tables;

显示表的结构

>mysql> DESC Lesson_student;

当然还可以操作更多,具体的细节,请看mysql教程,这里所有关于你要问的关于Mysql的答案都有

  1. 还有在Django admin 后台显示 自定义标题,去掉表格名称后面的‘s’等等。
    添加verbose_name_plural 即可以去掉表格名称后面的s
class ItemScorePhoto(models.Model):
    itemImages = models.ImageField(verbose_name='考核照片', upload_to='images/itemScore/%Y/%m/%d')
    itemScore = models.ForeignKey("ItemScore", verbose_name='项目分组', on_delete=models.CASCADE)
    itemPhotoDate = models.DateField(verbose_name='照片日期', auto_now_add=True)
    class Meta:
        verbose_name = '项目照片'
        verbose_name_plural = '项目照片'

在Django admin 后台显示 自定义标题通过在Lesson/admin.py 文件中添加如下代码实现:

admin.site.site_title = '课程后台管理'
admin.site.site_header = '课程管理'
  1. 要在Django后台显示数据表,需要在Lesson/admin.py中注册,比如1中提到的3个表,需要注册如下:
#Lesson/admin.py
from django.contrib import admin
from .models import *

@admin.register(ContentScore)
class ContentScoreInfoAdmin(admin.ModelAdmin):
    # 设置要显示的字段
    list_display = ['id', 'content', 'item', 'team', 'teacher', 'contentScore', 'contentDate']
 @admin.register(Team)
class TeamInfoAdmin(admin.ModelAdmin):
    # 设置要显示的字段
    list_display = ['id', 'teamID', 'item', 'teamOrder', 'teamDate']
@admin.register(Item)
class ItemInfoAdmin(admin.ModelAdmin):
    # 设置要显示的字段
    list_display = ['id', 'itemID', 'itemName', 'itemWeight', 'teamMode', 'subject']   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值