# 第十節:ORM作業
# ORM作業:
假設有以下`ORM`模型:
```
<pre class="calibre12">```
<span class="hljs-keyword">from</span> django.db <span class="hljs-keyword">import</span> models
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Student</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-string">"""學生表"""</span>
name = models.CharField(max_length=<span class="hljs-params">100</span>)
gender = models.SmallIntegerField()
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">'student'</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Course</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-string">"""課程表"""</span>
name = models.CharField(max_length=<span class="hljs-params">100</span>)
teacher = models.ForeignKey(<span class="hljs-string">"Teacher"</span>,on_delete=models.SET_NULL,null=<span class="hljs-keyword">True</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">'course'</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Score</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-string">"""分數表"""</span>
student = models.ForeignKey(<span class="hljs-string">"Student"</span>,on_delete=models.CASCADE)
course = models.ForeignKey(<span class="hljs-string">"Course"</span>,on_delete=models.CASCADE)
number = models.FloatField()
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">'score'</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Teacher</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-string">"""老師表"""</span>
name = models.CharField(max_length=<span class="hljs-params">100</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">'teacher'</span>
```
```
使用之前學到過的操作實現下面的查詢操作:
1. 查詢平均成績大于60分的同學的id和平均成績;
2. 查詢所有同學的id、姓名、選課的數量、總成績;
3. 查詢姓“李”的老師的個數;
4. 查詢沒學過“李老師”課的同學的id、姓名;
5. 查詢學過課程id為1和2的所有同學的id、姓名;
6. 查詢學過“黃老師”所教的“所有課”的同學的id、姓名;
7. 查詢所有課程成績小于60分的同學的id和姓名;
8. 查詢沒有學全所有課的同學的id、姓名;
9. 查詢所有學生的姓名、平均分,并且按照平均分從高到低排序;
10. 查詢各科成績的最高和最低分,以如下形式顯示:課程ID,課程名稱,最高分,最低分;
11. 查詢沒門課程的平均成績,按照平均成績進行排序;
12. 統計總共有多少女生,多少男生;
13. 將“黃老師”的每一門課程都在原來的基礎之上加5分;
14. 查詢兩門以上不及格的同學的id、姓名、以及不及格課程數;
15. 查詢每門課的選課人數;
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis