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

标签 django django-views django-class-based-views

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

你认为在这种情况下我应该使用哪个 View ?任何人都可以在这里提供最佳实践吗?

最佳答案

您可以构建一个 mixin 以用于 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):
     # ...

您可能会看到如何以独立于模型的方式构建此 mixin,以便它可以在您的目标和区域模型中重复使用。

关于django - 如何使用基于 django 类的 View 发送包含不同模型查询集的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16663521/

相关文章:

python - 解码 Django session cookie 值

django - 在基于 Django 类的 View 中使用 modelformset_factory

django - 如何为基于类的 View 编写装饰器——基于 View 对象的权限

django - 为什么需要用@method_decorator装饰login_required装饰器

python - Django Heroku 推送失败

django - 如何在 DRF 的 APIClient() delete() 请求中设置 header ?

django request.user.is_superuser 不起作用

python - Django 国际化语言代码

python - 如何让Django返回一个模板,但在返回模板后继续执行一个进程?

Django DetailView 找不到基于 SLUG 的对象