我需要运行一系列过滤器然后我希望能够循环结果。我正在考虑从一个表单开始,我可以选择过滤器选项。我在循环时需要下一个/上一个按钮。
我该如何实现?我只是寻找高级别的建议和示例代码(如果有的话)。
我知道我可以在AdminSite中设置index_template来创建第一页。我知道有SimpleListFilter,但我认为我不能使用它,因为我想要多个需要配置的过滤器。此外,我不想选择所有模型来循环它们。我打算编写自定义添加/更改视图。
我不确定如何从选定的过滤器选项转到每个所选模型的循环。我不确定是否可以传递和存储查询集,以便我循环访问每个模型。我想到的一些选项是将过滤器参数存储在url和当前的型号中。我想到的另一件事是将结果存储在数据库中并重新调用它。
更新 有人认为这太宽泛了,所以我会更具体一点。我认为最好的解决方案是从AdminSite继承并将index_template覆盖为包含过滤器的表单。如何将表单提交链接到将循环访问项目的视图?我假设我需要向管理员添加自定义视图,但我不确定如何将数据传递给视图。
答案 0 :(得分:1)
这是一个相当广泛的问题,但我会试一试。
有几种方法可以实现这一目标:
使用过滤查询作为变量设置模型。
模型:
class Filter(models.Model):
Filter_Query = models.CharField(max_length=30)
的观点:
from app_name.models import Filter, Some_Model
def filter(request, pk):
template = loader.get_template("app_name/filter_search.html")
filter_1 = Filter.objects.get(id=pk)
some_model = Some_Model.objects.all()
filter_1_search = model_name.filter(some_option=filter_1)
context = RequestContext(request, {'filter_1_search': filter_1_search})
return HttpResponse(template.render(context))
然后在单独的页面中,您可以加载结果。
{$("#some_div").load(filter/1)
甚至更容易,您可以使用AJAX发送您想要的任何过滤器查询。
的观点:
from app_name.models import Some_Model
def filter_query(request):
filter_1 = request.GET.get('filter_query', '')# Receives from AJAX
some_model = Some_Model.objects.all()
filter_1_search = model_name.filter(some_option=filter_1)
jsonDump = json.dumps(str(filter_1_search))
return HttpResponse(jsonDump, content_type='application/json')
的javascript:
var data_JSON_Request = {'filter_query': filter_search1, 'csrfmiddlewaretoken': "{{csrf_token}}"};//JSON package.
function ajax_call(data_JSON_Request){
$(function jQuery_AJAX(){
$.ajax({
type: 'GET',
url: '/filter_query/',
data: data_JSON_Request,
datatype: "json",
success: function(data) {$("#sove_div").load(data);
open_model_menu();
},//success
error: function() {alert("failed...");}
});//.ajax
});//jQuery_AJAX
};//ajax_call