Нужно реализовать django-фильтр с вызовом ajax - PullRequest
1 голос
/ 09 апреля 2019

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

views.py

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

test.html

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

{% block content %}

    <form method="get">
       {{ filter.form.as_p }}
       <button type="submit">Search</button>
    </form>

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

{% endblock %}

filters.py

class BookFilter(django_filters.FilterSet):

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

    authors = django_filters.ModelMultipleChoiceFilter(queryset=Author.objects.all(), widget=forms.CheckboxSelectMultiple)

    categories = django_filters.ModelMultipleChoiceFilter(queryset=Category.objects.all(), widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Book
        fields = ['publication', 'authors', 'categories', ]

models.py

class Book(models.Model):
    name = models.CharField(max_length=100)
    publication = models.ForeignKey(Publication, on_delete=models.CASCADE)
    authors = models.ManyToManyField(Author, through='AuthorBook')
    categories = models.ManyToManyField(Category, through='BookCategory')

В ajax необходимо указать значение URL.Джанго-фильтр работает автоматически.Итак, я не могу понять, как реализовать вызов ajax с django_filter.Заранее спасибо.

1 Ответ

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

добавить django-crispy-forms к вашему Requeirements.txt пример использования:

views.py

filter = YourFilterClass(request.GET, queryset=Model.objects.all())
return render(request,'template/index.html', {filter:filter})

html

<form method="get">
        <div class="form-group">
            <label class="col-md-4 control-label">Şehir :</label>
            <div class="col-md-8">
                <div class="col-md-12 col-xs-12">
                    {% render_field filter.form.customer__city class="form-control select" data-live-search="true" data-size="15" %}
                </div>
            </div>
        </div>
    </form>

после того, как вы можете отправить свою форму с помощью ajax, и она вернет отфильтрованные объекты

...