如何使用基于django类的视图发送json包含不同的模型查询集

tun*_*nak 3 django django-views django-class-based-views

我必须为我的两个不同模型"目的地和区域"实现自动完成搜索,所以我应该根据我的两个不同查询集的查询结果向我的模板发送json响应.

您认为在这种情况下我应该使用哪种视图吗?谁能提供最佳实践?

Yuj*_*ita 13

你可以构建一个mixin用于a ListView.你可以搭载各种ListView功能,如分页/模型/ qs创建.

generic.base.View虽然没有太大的不同,只是建立一个平原!

from django.core import serializers

class AJAXListMixin(object):

     def dispatch(self, request, *args, **kwargs):
         if not request.is_ajax():
             raise http.Http404("This is an ajax view, friend.")
         return super(AJAXListMixin, self).dispatch(request, *args, **kwargs)

     def get_queryset(self):
         return (
            super(AJAXListMixin, self)
            .get_queryset()
            .filter(ajaxy_param=self.request.GET.get('some_ajaxy_param'))
         )

     def get(self, request, *args, **kwargs):
         return http.HttpResponse(serializers.serialize('json', self.get_queryset()))


class AjaxDestinationListView(AJAXListMixin, generic.ListView):
     # ...
Run Code Online (Sandbox Code Playgroud)

您可以看到如何以独立于模型的方式构建此mixin,以便可以在Destinations和Regions模型中重用它.