Я совершенно новичок не только в django, но и в целом в программировании.
Пытаюсь создать фильтры по полям на сайте, нашёл такой вариант:
forms.py
class BookFilterForm(forms.Form):
lang_category = forms.ChoiceField(required=False, choices=CATEGORIES, widget=forms.Select, label='Выберете язык')
views.py:
def index(request):
books = Book.objects.filter(is_active=True)
if form.is_valid():
if form.cleaned_data['lang_category']:
books = books.filter(lang_category__icontains=form.cleaned_data['lang_category'])
models.py:
CATEGORIES = (
(1, 'Русский'),
(2, 'Английский')
)
class Book(models.Model):
title = models.CharField(max_length=300, verbose_name='Название')
lang_category = models.IntegerField(choices=CATEGORIES, default=1, db_index=True, verbose_name='Язык')
index.html:
<form method="GET">
{{ form.as_p }}
<button type="submit" class="btn btn-primary">Фильтровать</button>
</form>
Собственно проблем с этим кодом не возникает, он работает и работает как надо, но
в моделях у меня есть ещё поле:
author_book = models.CharField(max_length=300, null=True, blank=True, verbose_name='Автор')
и вот по этому полю как фильтровать хоть убей не пойму, гуглил само собой и не один день
то есть метод который я описал выше подходит только для choices полей (как я понял это кортеж), а вот с динамическими полями это не прокатывает.
пробовал создание фильтров через django_filters вот так:
import django_filters
from .models import Book
class BookFilter(django_filters.FilterSet):
lang_category = django_filters.CharFilter(lookup_expr='icontains')
но это совершенно не то что надо, это просто поиск по полю а хотелось бы так: