@Victor-Sproot

Как сделать фильтры из полей на сайте Django?

Я совершенно новичок не только в 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')

но это совершенно не то что надо, это просто поиск по полю а хотелось бы так:
656a448ca38a6730676686.png
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы