Оптимизация поиска в django
Можно ли оптимизировать/улучшить данный код для поиска человека по возрасту? Либо как можно по другому это сделать? И так же в случае если в бд есть несколько людей с одним возрастом то, в html шаблоне выведется несколько раз. Как это можно исправить? views.py
from django.views.generic.base import View, ContextMixin, TemplateResponseMixin
from . import models
from . import form
class PeopleFind(View, ContextMixin, TemplateResponseMixin):
template_name = 'django_forms/People.html'
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['peoples'] = models.People.objects.all()
return context
def get(self, request, *args, **kwargs):
context = self.get_context_data(*args, **kwargs)
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
form_People = form.PeopleFindForm(request.POST)
if form_People.is_valid():
values = form_People.cleaned_data
context = self.get_context_data(*args, **kwargs)
context['find_peoples'] = models.People.objects.filter(age = values['age'])
print(context)
return self.render_to_response(context)
forms.py
from django import forms
class PeopleFindForm(forms.Form):
age = forms.IntegerField()
models.py
from django.db import models
class People(models.Model):
name = models.CharField(max_length = 30)
age = models.IntegerField()
def __str__(self):
return str(self.name)
People.html (html шаблон)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method = "POST">
{% csrf_token %}
<p>Выберите возраст вашего персонажа:</p><br>
{% for people in peoples %}
<p><input type = "radio" name = "age" value = "{{ people.age }}">{{ people.age }}</p><Br>
{% endfor %}
{% if find_peoples %}
{% for find_people in find_peoples %}
<p> {{ find_people.name }} </p><br>
<p> {{ find_people.age }} </p><br><br>
{% endfor %}
{% endif %}
<input type = "submit">
</form>
</body>
</html>