当前位置: 首页 > news >正文

网站开发需要的软件清博舆情系统

网站开发需要的软件,清博舆情系统,3d网页游戏开服表,集宁有做蒙古黑石材网站的嘛准备工作 首先,确保你已经安装了django-filter包。如果没有,请使用以下命令安装: pip install django-filter然后,在你的settings.py文件中添加django_filters到INSTALLED_APPS列表中: INSTALLED_APPS [# ...djang…

准备工作

首先,确保你已经安装了django-filter包。如果没有,请使用以下命令安装:

pip install django-filter

然后,在你的settings.py文件中添加django_filters到INSTALLED_APPS列表中:

INSTALLED_APPS = [# ...'django_filters',
]

本机环境:

Django==3.2.15

django-filter==24.2

ps:安装的包是django-filter,但是在settings里面设置的却是django-filters。这也是蛮坑的一个点。

目的

一个TaskViewSet,带模型Task的,里面有两个自定义动作,一个是根据template_id过滤,一个是根据project_id过滤

filters.py:

那么我可以创建一个filters.py文件在应用目录中:

import django_filters
from .models import Taskclass TaskFilter(django_filters.FilterSet):class Meta:model = Taskfields = ['template_id', 'project_id']

注意如果过滤的字段本身就属于Task模型的字段,那么不用额外定义,如果过滤的条件字段不属于Task模型的字段,那么需要额外定义如下:
同时,如果想要定义精准过滤和模糊过滤,可以定义如下:

from django.db.models import Qfrom .models import BkHostclass BkHostFilter(django_filters.FilterSet):operator = django_filters.CharFilter(field_name='operator', method='filter_operator')class Meta:model = BkHostfields = {'host_id': ['exact'],'host_name': ['exact', 'icontains'],'host_innerip': ['exact', 'contains'],}def filter_operator(self, queryset, name, value):return queryset.filter(Q(operator__exact=value) | Q(operator__icontains=value))

其中icontains表示不区分大小写的模糊匹配。contains表示区分大小写的模糊匹配。

视图集

首先视图集本身要指定filter_class

class TaskViewSet(ModelViewSet):queryset = Task.objects.all()serializer_class = TaskSerializerlookup_field = "task_id"filter_class = TaskFilter

如果是自定义动作(即被@action装饰器修饰的)需要应用django-filter的话,需要在动作中再次手动指定

    @swagger_auto_schema(manual_parameters=[openapi.Parameter('template_id',openapi.IN_QUERY,type=openapi.TYPE_INTEGER,)])@action(detail=False, methods=["get"], url_path="list-by-template")def list_by_template(self, request):  # ……省略代码# 手动应用过滤器filterset = self.filter_class(request.GET, queryset=self.get_queryset())if not filterset.is_valid():return Response(filterset.errors, status=400)tasks = filterset.qs

如果是非自定义动作,可以直接如下使用:

tasks = self.filter_queryset(self.get_queryset())

路径匹配

注意django-filter会从路径参数中拿在filters.py中指定的字段。所以如上代码只接受路径:
http://{your-domain}:8000/tasks/list-by-template/?template_id=xxx

总结

如果是自定义动作,除非过滤条件比较复杂,不然不需要用django-filter,因为还要手动指定,比较复杂。

http://www.hkea.cn/news/385009/

相关文章:

  • 做网站付费流程郑州seo技术
  • 云南网站开发有哪些实用的网络推广方法
  • 央视新闻最新消息今天什么叫seo
  • 网站建设的意义徐州百度推广
  • 建设网站建设的目标百度云盘资源
  • 个体工商户是否能够做网站在线生成个人网站源码
  • 临沂高端网站建设厦门网站推广费用
  • 网站模版友链交易交易平台
  • 武汉做网站找谁百度导航是哪个国家的
  • wordpress互动游戏黄石seo诊断
  • 网页设计作品下载志鸿优化设计
  • 宾馆网站制作seminar是什么意思
  • 网站建设的进度表爱站查询工具
  • 深圳聘请做网站人员长春刚刚最新消息今天
  • 汽配人网做网站沈阳网站seo公司
  • 网站 短链接怎么做网站建设网站定制
  • 网站开发凭证做什么科目百度推广关键词多少合适
  • 网站正在建设 h5模板新闻热点
  • 龙岗公司网站建设怎么上百度搜索
  • 七米网站建设网站自动推广软件免费
  • 余姚公司做网站跨境电商怎么做
  • 顺义哪有做网站厂家百度快照在哪里找
  • 深圳南山网站建设重庆seo黄智
  • 教育微网站建设我要学电脑哪里有短期培训班
  • 民宿预订网站制作推广方案怎么做
  • 做网站都要掌握什么网页模版
  • 网站怎么做qq微信登陆长沙优化网站哪家公司好
  • 为什么上不了建设银行个人网站漳州网络推广
  • 天津手机网站建站培训代运营公司可靠吗
  • 网站制作的一般步骤长春网站优化平台