Показывать поля в фильтре в зависимости от запроса

Я использую django-filter на своем сайте для поиска книг. Фильтр включает следующие поля: жанр книги, язык, на котором написана книга, дата публикации и поле поиска. Поиск ищет по нескольким полям в базе данных, включая название книги, авторов книги и т.д. Фильтр работает нормально, но я не понимаю, как сделать так, чтобы при поиске книги, когда я выбираю одни поля - другие поля удалялись в зависимости от того, есть ли такие объекты. Например, я ищу книгу на китайском языке, выбираю это поле, и у меня после вывода результатов удаляются неиспользуемые жанры. Сейчас у меня отображаются все фильтры, даже если там нет книг. Второй вопрос: могу ли я сделать так, чтобы после поиска я мог видеть, сколько объектов находится в каждом поле? То есть, если я ввел в поиск Гарри Поттер и получил результат, то я вижу, что в английском языке 5 объектов

models.py

class Book(models.Model):
   name = models.CharField(max_length=255)
   author = models.ForeignKey(
        "Authors",
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
    )
   subject = TreeManyToManyField("Subject")
   published_date = models.DateField(blank=True, null=True)
   language = models.ForeignKey(
        "Language", on_delete=models.SET_NULL, null=True)

class Subject(MPTTModel):
   name = models.CharField(
        max_length=1000,
        unique=True,
    )

class Language(models.Model):
    name = models.CharField(
        max_length=255,
        unique=True,
    )

class Authors(models.Model):
       name = models.CharField(
        max_length=255,
        unique=True,
        )

filters.py

class BookFilter(django_filters.FilterSet):
  search = django_filters.CharFilter(
        method="my_custom_filter",
        widget=TextInput(
            attrs={
                "class": "form-control",
                "placeholder": _("Type to search"),
            }
        ),
    )
    language = django_filters.ModelMultipleChoiceFilter(
        field_name="language",
        queryset=Language.objects.order_by("name"),
        widget=forms.CheckboxSelectMultiple(),
    )
    subject = django_filters.ModelMultipleChoiceFilter(
        field_name="subject",
        queryset=Subject.objects.all(),
        widget=autocomplete.ModelSelect2Multiple(}
        ),
    )
    class Meta:
        model = Book
        fields = {
            "subject",
            "language",
            "published_date",
        }

    def my_custom_filter(self, queryset, name, value):
        q = value
        return (
            queryset.annotate(
                rank=SearchRank(vector, q),
                similarity=TrigramSimilarity("title", q)
                + similarity=TrigramSimilarity("author", q)
)

views.py

def BookListView(request):
    book = Book.objects.all()
    filter = BookFilter(request.GET, queryset=book)
    context = {
        "filter": filter,
        "book": book,
    }
    return render(request, "book.html", context)

book.html

{% extends "base.html" %}

{% block content %}
    <form method="get">
        {{ filter.form.as_p }}
        <input type="submit" />
    </form>
    {% for obj in filter.qs %}
        {{ obj.name }}
<br />
    {% endfor %}
{% endblock %}
Вернуться на верх