Django-фильтр флажок отправить - PullRequest
2 голосов
/ 06 апреля 2019

Я использую django-filter==2.1.0 для реализации поискового фильтра.Я уже реализую это.Но теперь мне нужно искать, нажав флажок не по кнопке поиска.Мои коды приведены ниже:

models.py

class Book(models.Model):
  name = models.CharField(max_length=100)
  publication = models.ForeignKey(Publication, on_delete=models.CASCADE)

filters.py

class BookFilter(django_filters.FilterSet):

    publication = django_filters.ModelMultipleChoiceFilter(queryset=Publication.objects.all(),
                                                           widget= forms.CheckboxSelectMultiple)

    class Meta:
        model = Book
        fields = ['publication']

views.py

def test_view(request):
    book_list = Book.objects.all()
    book_filter = BookFilter(request.GET, queryset=book_list)
    temp = book_filter.form
    return render(request, 'test.html', {'filter': book_filter})

template

{% extends 'base.html' %}
{% load widget_tweaks %}

{% block content %}

    <form method="get">

        {% for choice in filter.form.publication %}

            <label>
                {{ choice.tag }}
                <span class="max-content-width">{{ choice.choice_label }}</span>
            </label>

        {% endfor %}
        <button type="submit">Search</button>

    </form>


    <ul>
        {% for book in filter.qs %}
            <li>{{ book.name }}</li>
        {% endfor %}
    </ul>

{% endblock %}

Работает нормально.Но я хочу добавить widget = forms.CheckboxInput(attrs={'onclick': 'this.form.submit();'}) в мой filters.py для ввода флажка.Я не понимаю, как я могу добавить другой виджет.Пожалуйста, помогите мне решить эту проблему.

1 Ответ

0 голосов
/ 06 апреля 2019

Создайте виджет , напишите скрипт JavaScript и используйте метакласс Media в виджете, чтобы использовать его.После этого просто используйте виджет в поле вашего флажка.

...