需要用ajax调用实现django-filter

Posted

技术标签:

【中文标题】需要用ajax调用实现django-filter【英文标题】:Need to implement django-filter with ajax call 【发布时间】:2019-08-30 08:31:45 【问题描述】:

我使用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 值。 django-filter 自动工作。所以,我不明白如何用 django_filter 实现 ajax 调用。提前致谢。

【问题讨论】:

检查这个link 这里你可以看到在Django中实现ajax调用的方式。 你找到解决办法了吗? 【参考方案1】:

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 提交表单之后,它将返回过滤后的对象

【讨论】:

以上是关于需要用ajax调用实现django-filter的主要内容,如果未能解决你的问题,请参考以下文章

用JQuery实现ajax删除数据

Django ajax异步请求分页的实现

用jsp实现省市区三级联动下拉

学习笔记:简单ajax实现

我该怎么用AJAX控件来实现登录的功能?

多级联动系列——ajax调用XML实现三级联动