Managerクラスの「order_by」メソッドで行う
/hello/views.py
def index(request): data = Friend.objects.all().order_by('age') params = { 'title': 'Hello', 'message': '', 'data': data, } return render(request, 'hello/index.html', params)
/hello/templates/hello/index.html
<body class="container"> <h1 class="display-4 text-primary">{{title}}</h1> <p>{{message|safe}}</p> <table class="table"> <tr> <th>id</th> <th>name</th> <th>age</th> <th>mail</th> <th>birth</th> </tr> {% for item in data %} <tr> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.age}}</td> <td>{{item.mail}}</td> <td>{{item.birthday}}</td> </tr> {% endfor %} </table> </body>
逆の場合はorder_by().reverse()とする
data = Friend.objects.all().order_by('age').reverse()
### 指定した範囲のレコードを取り出す
/hello/views.py
def find(request): if(request.method == 'POST'): msg = 'Search Result:' form = FindForm(request.POST) find = request.POST['find'] list = find.split() data = Friend.objects.all()[int(list[0]):int(list[1])] else: msg = 'search words...' form = FindForm() data =Friend.objects.all() params = { 'title': 'Hello', 'message': msg, 'form': form, 'data': data, } return render(request, 'hello/find.html', params)
/hello/templates/hello/find.html
<body class="container"> <h1 class="display-4 text-primary">{{title}}</h1> <p>{{message|safe}}</p> <form action="{% url 'find' %}" method="post"> {% csrf_token %} {{ form.as_p }} <tr> <th></th><td><input type="submit" value="click" class="btn btn-primary mt-2"></td> </tr> </form> <table class="table"> <tr> <th>id</th> <th>name</th> <th>age</th> <th>mail</th> <th>birthday</th> </tr> {% for item in data %} <tr> <td>{{item.id}}</td> <td>{{item.name}}</td> <td>{{item.age}}</td> <td>{{item.mail}}</td> <td>{{item.birthday}}</td> </tr> {% endfor %} </table> </body>
### レコードの集計
aggregateメソッドで集計を行わせる
– count: レコード数
– sum: 合計
– avg: 平均
– min: 最小値
– max: 最大値
/hello/views.py
from django.db.models import Count, Sum, Avg, Min, Max def index(request): data = Friend.objects.all() re1 = Friend.objects.aggregate(Count('age')) re2 = Friend.objects.aggregate(Sum('age')) re3 = Friend.objects.aggregate(Avg('age')) re4 = Friend.objects.aggregate(Min('age')) re5 = Friend.objects.aggregate(Max('age')) msg = 'count:' + str(re1['age__count']) + '<br>Sum:' + str(re2['age__sum']) + '<br>Average:' + str(re3['age__avg']) + '<br>Min:' + str(re4['age__min']) + '<br>Max:' + str(re5['age__max']) params = { 'title': 'Hello', 'message': '', 'data': data, } return render(request, 'hello/index.html', params)
avgの小数点以下がおかしなことになってますが、filterを使えば大抵の事は出来るとのこと。