我有一个用django-rest-framework构建的API,我希望为它添加过滤功能。我在这里关注指南: http://www.django-rest-framework.org/api-guide/filtering/#djangofilterbackend
我看到两个问题:
method="post"
。我的API目前仅支持GET请求,并且应用过滤器会导致“405 method not allowed”错误。 我的模块版本:
Django(1.8)
django-crispy-forms(1.6.0)
django-filter(0.12.0)
django-guardian(1.3.2)
django-mssql(1.7)
django-pyodbc(0.3.0)
django-rest-swagger(0.3.4)
djangorestframework(3.3.2)
我已经挖掘了模板,看起来没有简单的方法来覆盖表单创建。其余框架中的base.html
模板最后都有这个
{% if filter_form %}
{{ filter_form }}
{% endif %}
但它包含在{% block body %}
中,所以要用我自己的模板覆盖它,我还必须包含正文中的其他所有内容。这似乎是错误的解决方案。
我还搜索了文档,寻找指定GET而不是POST的地方,并且没有发现任何提及。
我不想更改API以通过POST方法处理过滤器。最终API将被扩展为支持实际创建新资源的真实POST方法,因此现在通过POST应用过滤器只会产生其他问题。
有没有办法更改模态表单的提交方法?或者用我自己的模态模板覆盖它而不重复身体块的其余部分的好方法?
=====
的修改
我已经设法使用一些jQuery来纠正上述问题,但这感觉相当hackish。如果有更好的解决方案,我仍然会对此感兴趣。
$(document).ready(function () {
// change filter submit method to GET instead of POST
var form = $('#filtersModal form');
form.attr('method', 'get');
// add a submit button to the filter modal dialog
var cancel = $('<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>');
var submit = $('<button type="submit" class="btn btn-primary">Apply</button>');
var footer = $('<div class="modal-footer"></div>');
footer.append(cancel);
footer.append(submit);
form.append(footer);
});
答案 0 :(得分:0)
我想这是一个迟到的回复。
从
扩展您的过滤器类django_filters.rest_framework.FilterSet
而不是
django_filters.FilterSet