Имеется табличка с контактами, в которую надо возвращать элементы согласно данным из формы фильтра. Фильтров несколько, по одному на каждое поле модели. Не могу додуматься как мне передавать данные из форм через GET запрос в фильтр чтобы отправлять в шаблон правильный список объектов. Подскажите кто-нибудь, как можно реализовать такую фильтрацию.
contacts.html
<form class="d-flex" method="get" action="{% url 'contacts' %}">
{% csrf_token %}
{{ subjectFilter.subject }}
{{ typeFilter.type }}
{{ infoFilter.info }}
{{ dateFilter.date }}
<button type="submit" class="btn btn-outline-success">Искать</button>
</form>
views.py
class ContactListView(View):
def get(self, request):
contacts = Contact.objects.all()
addContact = AddContactForm
editContact = EditContactForm
addType = AddTypeForm
addSubject = AddSubjectForm
typeFilter = TypeFilter
subjectFilter = SubjectFilter
infoFilter = InfoFilter
dateFilter = DateFilter
return render(request, 'contacts.html', {
'contacts': contacts,
'addContact': addContact,
'addType': addType,
'addSubject': addSubject,
'editContact': editContact,
'typeFilter': typeFilter,
'subjectFilter': subjectFilter,
'infoFilter': infoFilter,
'dateFilter': dateFilter
})
def post(self, request):
if request.method == 'POST':
form = AddContactForm(request.POST)
if form.is_valid():
# сохранение формы
contact = Contact() # новый объект
contact.type = form.cleaned_data['type']
contact.subject = form.cleaned_data['subject']
contact.info = form.cleaned_data['info']
contact.date = datetime.date.today()
contact.KEY = contact.id
contact.save()
return HttpResponseRedirect('/contacts/')
models.py
class Type(models.Model):
name = models.CharField('Название', max_length=50)
def __str__(self):
return self.name
class Subject(models.Model):
name = models.CharField('Имя', max_length=50)
def __str__(self):
return self.name
class Contact(models.Model):
KEY = models.IntegerField('Идентификатор', default=None, null=True, blank=True)
info = models.CharField('Инфо', max_length=100)
date = models.DateField(default=datetime.date.today(), verbose_name='Дата добавления')
type = models.ForeignKey(Type, verbose_name='Тип', on_delete=models.CASCADE, default=None)
subject = models.ForeignKey(Subject, verbose_name='Человек', on_delete=models.CASCADE, default=None)
def __str__(self):
return self.info