3 votes

Besoin d'implémenter django-filter avec un appel ajax

Je suis en train d'utiliser django-filter==2.1.0 pour mon filtre de recherche. Maintenant j'ai besoin d'ajouter un appel ajax dans mon filtre de recherche. Mes codes sont donnés ci-dessous:

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 %}

       {{ filter.form.as_p }}
       Rechercher

        {% for book in filter.qs %}
            {{ book.name }}
        {% endfor %}

{% 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')

Dans ajax, une valeur d'URL est nécessaire. django-filter fonctionne automatiquement. Donc, je ne peux pas comprendre comment implémenter un appel ajax avec django_filter. Merci d'avance.

-1voto

jackquin Points 115

Ajoutez django-crispy-forms à votre fichier requeirements.txt exemple d'utilisation:

views.py

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

html

            Sehir :

                    {% render_field filter.form.customer__city class="form-control select" data-live-search="true" data-size="15" %}

après, vous pouvez soumettre votre formulaire avec ajax et il renverra des objets filtrés

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X