Создание фильтров по полям в Django можно сделать с помощью модуля `django_filters`. Для этого необходимо:
1. Установить `django_filters`:
```
pip install django-filter
```
2. Добавить `django_filters` в `INSTALLED_APPS` в конфигурационном файле `settings.py`:
```python
INSTALLED_APPS = [
# ...
'django_filters',
]
```
3. В файле `filters.py` (создайте его в каталоге вашего приложения, если этого файла там нет), напишите следующий код:
```python
import django_filters
from .models import YourModel
class YourModelFilter(django_filters.FilterSet):
class Meta:
model = YourModel
fields = ['author_book', 'another_field'] # Здесь вместо 'another_field' пишите поле по которому еще хотите фильтровать.
```
4. Далее во вью, добавьте созданный фильтр:
```python
from .filters import YourModelFilter
def your_view(request):
your_filter = YourModelFilter(request.GET, queryset=YourModel.objects.all())
return render(request, 'your_template.html', {'filter': your_filter})
```
В строке, где создается экземпляр фильтра, в качестве первого аргумента передается `request.GET`, который содержит данные из строки запроса.
5. В вашем html-файле используйте следующую конструкцию для вывода формы фильтрации:
```html
<form method="GET">
{{filter.form.as_p}}
<button type="submit">Apply filter</button>
</form>
```
Где `filter.form.as_p` - это вернет форму фильтра, с каждым полем обернутым в тег `<p>`.
6. Для отображения отфильтрованных данный, в шаблоне пройдитесь в цикле по отфильтрованным данным:
```html
{% for object in filter.qs %}
<!-- Вывод данных объекта -->
{% endfor %}
```
При необходимости также можно применять статические фильтры, а также фильтрацию по некоторым динамическим полям (например, выводить только те книги, которые были написаны в определенном году).
Дополнительная документация и возможности django_filters доступны по ссылке: https://django-filter.readthedocs.io/en/stable/