Получение результата, а фильтр имеет только связанное поле [Django-filter].
Я хочу создать django-фильтр, в котором при поиске книги по названию или содержанию пользователи получают результат, а фильтр имеет только связанное поле. А также в каждом поле есть количество содержащихся книг с номерами. Например, я ищу книгу о природе, я пишу "природа" в поле поиска в фильтре, а затем нажимаю "Поиск". Получаю результат и фильтр с соответствующими полями и результатами (например, фильтр имеет следующие значения - языковой фильтр: Английский (54), Немецкий (20) ; Издатель: Oxford (100), Seven House (21) и т.д.). Я хочу создать django фильтр, в котором когда пользователи ищут книгу по названию или содержанию, они получают результат, а фильтр имеет только связанное поле. А также в каждом поле есть количество содержащих книг с номерами. Например, я ищу книгу о природе, я пишу "природа" в поле поиска в фильтре, а затем нажимаю "Поиск". Получаю результат и фильтр с соответствующими полями и результатами (например, фильтр имеет следующие значения - языковой фильтр: Английский (54), Немецкий (20) ; Издатель: Оксфорд (100), Seven House (21) и т.д.). Как кратко сформулировать мои основные вопросы
- How to create a filter that after the request had values relevant to the request?
- How to count this data in the filter?
models.py
class Book(models.Model):
title = models.CharField(max_length=255)
description = models.CharField(max_length=255)
publisher = models.ForeignKey("Publisher", null=True, blank=True, on_delete=models.SET_NULL)
language = models.ForeignKey("Language", null=True, blank=True, on_delete=models.SET_NULL)
class Publisher(models.Model):
name = models.CharField(max_length=255)
class Language(models.Model):
name = models.CharField(max_length=255)
books.hmtl
<div>
{{filter.form.as_p}}
{{filter.form.media}}
</div>
<div>
{% for book in filter.qs %}
{{book.title}}
{{book.description}}
{% endfor %}
</div>
filters.py
class BookFilter(django_filters.FilterSet):
class Meta:
model = Book
fields = {
"title",
"description",
"language",
"publisher",
}
views.py
def BookListView(request):
book = Book.objects.all()
filter = BookFilter(request.GET, queryset=books)
context = {"books": books, "filter": filter}
return render(request, "books.html", context)
Насколько я понимаю, у вас есть три требования.
Получить все книги, содержащие искомые названия.
books = Books.objects.filter(title__contains='nature').select_related('publisher', 'language')Получить список книг с учетом языка.
books.values('language__name').annotate(count=Count('id'))Получение списка книг по издательству.
books.values('publisher__name').annotate(count=Count('id'))