#困っているところ
Djangoを使ったアプリ開発に挑戦しているのですが、テーブルの並び替えと分割の仕方がわからず思うようにできません。ひとまず、簡単な例に置き換えて挑戦しています。以下の問題でわかる方がいらっしゃればご教授いただければ幸いです。
#環境
python 3.9.5
Django 3.2.4
#モデル
アプリが以下の二つのテーブルを有するとします。
django
1#=================================================================== 2#models.py 3#=================================================================== 4from django.db import models 5 6# Create your models here. 7 8List = (('Male','男'),('Female','女')) 9 10class ClassModel (models.Model): 11 ClassNumber = models.IntegerField() 12 HomeroomTeacher = models.CharField(max_length=20) 13 14class MenberModel (models.Model): 15 BelongClass = models.ForeignKey(ClassModel,on_delete=models.CASCADE) 16 ForM = models.CharField(choices=List,max_length= 6,default='Male') 17 Number = models.IntegerField() 18 Name = models.CharField(max_length=20) 19 Point = models.IntegerField()
・クラステーブル
クラス | 担任 |
---|---|
1 | I先生 |
2 | J先生 |
・クラスメンバーテーブル
クラス | 出席番号 | 性別 | 名前 | 点数 |
---|---|---|---|---|
1 | 3 | 男 | Cくん | 100 |
2 | 2 | 男 | ロくん | 80 |
1 | 5 | 女 | Eさん | 60 |
1 | 4 | 女 | Dさん | 60 |
1 | 2 | 男 | Bくん | 45 |
2 | 3 | 男 | ハくん | 60 |
1 | 1 | 男 | Aくん | 60 |
2 | 4 | 女 | 二さん | 40 |
2 | 5 | 女 | ホさん | 60 |
1 | 6 | 女 | Fさん | 90 |
2 | 1 | 男 | イくん | 55 |
2 | 6 | 女 | へさん | 70 |
これ以下のように4つの表へ整理し、表示させることが目標です。
クラス | 担任 | 出席番号 | 性別 | 名前 | 点数 |
---|---|---|---|---|---|
1 | I先生 | 1 | 男 | Aくん | 60 |
1 | I先生 | 2 | 男 | Bくん | 45 |
1 | I先生 | 3 | 男 | Cくん | 100 |
平均 | 68.3333 |
クラス | 担任 | 出席番号 | 性別 | 名前 | 点数 |
---|---|---|---|---|---|
1 | I先生 | 4 | 女 | Dさん | 60 |
1 | I先生 | 5 | 女 | Eさん | 60 |
1 | I先生 | 6 | 女 | Fさん | 90 |
平均 | 70 |
クラス | 担任 | 出席番号 | 性別 | 名前 | 点数 |
---|---|---|---|---|---|
2 | J先生 | 1 | 男 | イくん | 55 |
2 | J先生 | 2 | 男 | ロくん | 80 |
2 | J先生 | 3 | 男 | ハくん | 60 |
平均 | 65 |
クラス | 担任 | 出席番号 | 性別 | 名前 | 点数 |
---|---|---|---|---|---|
2 | J先生 | 4 | 女 | 二さん | 40 |
2 | J先生 | 5 | 女 | ホさん | 60 |
2 | J先生 | 6 | 女 | へさん | 70 |
平均 | 56.6667 |
#試したこと
以下のように、#1の個所で、「order_by」を使って並び替えをしてみました。うまくいっているように見えたのですがこれでは、「ClassModel」のidで並び替えられただけで、ClassModelのClassNumberでは並び変わりませんでした。
django
1#=================================================================== 2#views.py 3#=================================================================== 4from django.shortcuts import render 5from .models import ClassModel,MenberModel 6 7def tabletest(request): 8 object_list = MenberModel.objects.order_by('BelongClass','Number') #1 9 object_list2 = ClassModel.objects.all 10 return render(request, 'testapp2.html',{'object_list':object_list}) 11
html
1 2<table border = '1'> 3<tr> 4 <th>クラス</th> 5 <th>担任</th> 6 <th>出席番号</th> 7 <th>性別</th> 8 <th>名前</th> 9 <th>点数</th> 10</tr> 11 12{% for Object in object_list %} 13 <tr> 14 <td>{{Object.BelongClass.ClassNumber}}</td> 15 <td>{{Object.BelongClass.HomeroomTeacher}}</td> 16 <td>{{Object.Number}}</td> 17 <td>{{Object.get_ForM_display}}</td> 18 <td>{{Object.Name}}</td> 19 <td>{{Object.Point}}</td> 20 </tr> 21{% endfor %} 22 23</table>
結果
クラス | 担任 | 出席番号 | 性別 | 名前 | 点数 |
---|---|---|---|---|---|
1 | I先生 | 1 | 男 | Aくん | 60 |
1 | I先生 | 2 | 男 | Bくん | 45 |
1 | I先生 | 3 | 男 | Cくん | 100 |
1 | I先生 | 4 | 女 | Dさん | 60 |
1 | I先生 | 5 | 女 | Eさん | 60 |
1 | I先生 | 6 | 女 | Fさん | 90 |
2 | J先生 | 1 | 男 | イくん | 55 |
2 | J先生 | 2 | 男 | ロくん | 80 |
2 | J先生 | 3 | 男 | ハくん | 60 |
2 | J先生 | 4 | 女 | 二さん | 40 |
2 | J先生 | 5 | 女 | ホさん | 60 |
2 | J先生 | 6 | 女 | へさん | 70 |
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/11 03:55
2021/08/11 04:58
2021/08/12 13:48