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中介軟體的時候,一起實現。
相關文章
- 學生成績管理
- python學生成績管理系統【完整版】Python
- sql統計-關於學生成績SQL
- 【PTA】 學生成績錄入及查詢 (20分)
- 學生成績管理系統——課程設計報告
- python mysql實現學生成績管理系統蠖脲PythonMySql
- 基於java jsp的大學生成績管理系統JavaJS
- 學生成績等級判斷
- C++實現學生成績資訊登記表C++
- Java Swing+Mysql+beautyEye(介面優美)學校成績管理系統(管理員/學生/教師,資訊管理/選課管理/成績管理)JavaMySql
- PTA (學生成績讀取與排序)排序
- 教育視訊對學習有什麼影響?84%教師認為可以提高學生成績
- 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
- PAT-B 1038 統計同成績學生【對映】
- C語言陣列求學生成績C語言陣列
- gorm 關係一對一,一對多,多對多查詢GoORM
- 學生成績錄入系統,需要判斷成績格式合格,使用throw彈出,最後並列印全班成績單
- java+SQL做學生資訊管理系統(增刪改查)學生新作JavaSQL
- 利茲大學:研究發現不吃早飯的學生成績更差
- Django練習-學生管理系統案例Django
- 學生成績管理系統(C++指標、連結串列、檔案及物件導向的運用)C++指標物件
- 學生選題資訊管理系統
- 學生資訊管理系統用例
- PAT1038 統計同成績學生
- SparkSQL練習:對學生選課成績進行分析計算SparkSQL
- DreamJudge-1177-查詢學生資訊
- 某學校的學生資訊管理系統網站網站
- Python—Django:關於在Django框架中對資料庫的查詢函式,查詢集和關聯查詢PythonDjango框架資料庫函式
- 基於php學生資訊管理系統PHP
- Java簡單學生資訊管理系統Java
- --查詢班級表、課程表、學生選課表、學生表、成績表、15(3+2)計算
- 6.Hibernate多對多關係建立
- 在EFCore中多對多關係的設計資料插入與查詢
- 學生管理系統
- 記錄一次班級與學生修改為多對多關係的過程
- 利用pandas進行資料清洗,利用神經網路預測成績(參考資料酷客,學生成績預測)神經網路
- 學校如何把表格裡的成績,讓學生以二維碼的方式去掃描查詢呢?
- java績效管理系統Java