Django學生資訊管理系統(6)學生成績新增和學生成績查詢(多對對關係)
一、簡述
這個部分可以算是這個系統的難點部分了,主要涉及到了對多對多表格關係之間的操作
由於在前面我使用的是mangtomany的方式新增的多對多關係,在這個功能中,由於要涉及到分數,而分數和課程已經學生的關係甚至和課程的關係都是一對多,所以分數字段在學生與課程表的中間表,是最符合他們之間的關係。
但是由於使用manytomany的方法,無法直接對中間表進行操作,所以必須要從新定義這個中間表的model。但是這個時候再來從新定義一個相同的中間表會導致更改很多東西。所以為了我再次地應了一個新的中間表(score)
新的score表在每次選擇或者取消課程的同時也進行一次相對應的操作
score表的建立方式, 由於前幾次migrate出現了錯誤,導致我在migrate的時候出現了很多錯誤,所以在這裡我還是直接使用Navicat進行表格的建立
create table score(
id int not null auto_increment,
course_id int default null,
stu_id int default null,
primary key(id),
foreign key(course_id) references course(id),
foreign key(stu_id) references student
)
雖然沒有使用python manage.py makemigrations這些操作,model模型的定義還是不能少
class StuCourse(models.Model):
student = models.ForeignKey(Student)
course = models.ForeignKey(Course)
score = models.IntegerField(null=True, blank=True)
class Meta:
db_table = 'scores'
上面需要注意的是blank,null屬性的區別,前者是在表單提交時是否可以為空,後者是資料庫中是否可以為空,如果想要想建立學生id和課程id,再新增score,請一定要加上blank=True。否則後果自負。
二、新增方法:
def sure_scores(request):
if request.method == 'POST':
course_id = request.POST.get('course_id')
stu_id = request.POST.get('stu_id')
stu = Student.objects.get(pk=stu_id)
g_id = stu.g_id
course_id_score = request.POST.get('score_'+course_id)
stucourse = StuCourse.objects.get(course_id=course_id, student_id=stu_id)
stucourse.score = int(course_id_score)
stucourse.save()
return HttpResponseRedirect(reverse('course:currentgs', kwargs={'g_id': g_id}))
沒有進行過多的頁面渲染,這個頁面是先通過選擇班級,再跳轉進入的,目前只有第一個學生進行了選課的操作,如圖所示。
三、查詢方法
def select_scores(request):
if request.method == 'GET':
s_name = request.session['s_name']
stu = Student.objects.get(s_name=s_name)
stucourses = stu.stucourse_set.all()
return render(request, 'selscores.html', {'stucourses': stucourses, 'stu': stu})
查詢方法是先找到對應id所有的stucourses, 通過單個stucourse.course的方法可以直接找到所對應的course物件,從而達到相識課程名的效果。到此,這個學生資訊管理系統也就基本完成了。但是由於專案中,遇到的某些事,中間暫停了一段時間,最終的效果其實並沒有完全達到我之前想要達到的效果。
目前未完成的功能:管理員登入功能、使用者登入驗證功能
這兩個功能,我將在下一篇介紹MiddleWare中介軟體的時候,一起實現。
相關文章
- 學生成績管理系統
- 【練習】學生成績管理系統
- sql統計-關於學生成績SQL
- 基礎的學生成績查詢系統製作問題
- python學生成績管理系統【完整版】Python
- 學生成績管理資料庫資料庫
- 【PTA】 學生成績錄入及查詢 (20分)
- 學生成績管理系統——課程設計報告
- python mysql實現學生成績管理系統蠖脲PythonMySql
- C++實現學生成績資訊登記表C++
- 查詢各課程成績第一的學生的資訊
- Excel做網頁 學生成績網上查(轉)Excel網頁
- 一個簡單的學生成績管理程式 (轉)
- PTA (學生成績讀取與排序)排序
- 學生成績判斷函式介面函式
- Java Swing+Mysql+beautyEye(介面優美)學校成績管理系統(管理員/學生/教師,資訊管理/選課管理/成績管理)JavaMySql
- 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
- C語言連結串列實現的簡易學生成績管理系統C語言
- C語言陣列求學生成績C語言陣列
- OECD:報告顯示計算機教學對提升學生成績沒有幫助計算機
- 教育視訊對學習有什麼影響?84%教師認為可以提高學生成績
- 學生成績錄入系統,需要判斷成績格式合格,使用throw彈出,最後並列印全班成績單
- WPS幫助老師輕鬆查詢學生各科成績
- gorm 關係一對一,一對多,多對多查詢GoORM
- Django練習-學生管理系統案例Django
- 基於java jsp的大學生成績管理系統JavaJS
- 用ET表格打造更直觀的學生成績分析之相關函式函式
- WPS表格中 老師輕鬆查詢學生的各科成績
- 學生成績管理系統(C++指標、連結串列、檔案及物件導向的運用)C++指標物件
- SparkSQL練習:對學生選課成績進行分析計算SparkSQL
- 學生選題資訊管理系統
- 一個簡單的學生成績管理程式(二叉樹實現) (轉)二叉樹
- 由一個博問學到的SQL查詢方法 (一道多對多關係查詢的面試題)SQL面試題
- 關於Hibernate多層1對多關係查詢
- java+SQL做學生資訊管理系統(增刪改查)學生新作JavaSQL
- --查詢班級表、課程表、學生選課表、學生表、成績表、15(3+2)計算
- 學生管理系統
- YTUOJ-學生成績輸入和輸出(使用者自定義型別)型別