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

营销型网站建设合同范本市场营销产品推广策划方案

营销型网站建设合同范本,市场营销产品推广策划方案,西宁网站设计,网站建设报价明细及方案django-filter是一个通用的、可重用的应用程序,它可以减轻视图代码的编写工作量。具体来说,它允许用户根据模型的字段筛选查询集,并显示表单让他们这样做。 安装 pip install django-filter快速开始 在settings.py中添加如下配置: INSTAL…

django-filter是一个通用的、可重用的应用程序,它可以减轻视图代码的编写工作量。具体来说,它允许用户根据模型的字段筛选查询集,并显示表单让他们这样做。

安装

pip install django-filter

快速开始

settings.py中添加如下配置:

INSTALLED_APPS = [...'django_filters',
]
REST_FRAMEWORK = {'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',...),
}

现有如下model:

from django.db import modelsclass Product(models.Model):name = models.CharField(max_length=255)price = models.DecimalField(max_digits=5, decimal_places=2)description = models.TextField()release_date = models.DateField()manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE)

现在,我们在ListAPIView中添加filterset_fields属性:

class ProductAPIView(ListAPIView):queryset = Product.objects.all()serializer_class = ProductSerializerfilterset_fields = ('category', 'in_stock')

或者这样:

from django_filters import rest_framework as filtersclass ProductFilterSet(filters.FilterSet):class Meta:model = Productfields = ['category', 'in_stock']class ProductAPIView(ListAPIView):queryset = Product.objects.all()serializer_class = ProductSerializerfilterset_class = ProductFilterSet

此时,我们可以通过category或in_stock参数来精确查找product的列表数据。值得注意的是,如果同时存在filterset_classfilterset_fields属性时,将会优先使用filterset_class属性

FilterSet

在上面的例子我们可以看到,我们可以自定义字段来进行精确匹配…但是,这远远满足不了用户的需求,如果用户需要模糊匹配,范围查询等等操作时,那该怎么办呢?此时,我们可以对FilterSet改造,如下:

import django_filters
from django_filters import rest_framework as filtersclass ProductFilterSet(filters.FilterSet):price = django_filters.NumberFilter()price__gt = django_filters.NumberFilter(field_name='price', lookup_expr='gt')                           # price 大于 指定值price__lt = django_filters.NumberFilter(field_name='price', lookup_expr='lt')                           # price 小于 指定值price__isnull = django_filters.NumberFilter(field_name='price', lookup_expr='isnull')                   # price 为空price__notnull = django_filters.NumberFilter(field_name='price', lookup_expr='isnull', exclude=True)    # price 不为空release_year = django_filters.NumberFilter(field_name='release_date', lookup_expr='year')               # release_date的年份 等于 指定值release_year__gt = django_filters.NumberFilter(field_name='release_date', lookup_expr='year__gt')       # release_date的年份 大于 指定值release_year__lt = django_filters.NumberFilter(field_name='release_date', lookup_expr='year__lt')       # release_date的年份 小于 指定值class Meta:model = Productfields = ['price', 'release_year', 'category', 'in_stock']

如果使用该FilterSet,那么传入"price", “price__gt”, “price__lt”, “release_year”, “release_year__gt”, “release_year__lt”, “category”, "in_stock"参数都可以进行过滤了。

关于过滤器有两个主要的参数:

  • field_name: 要筛选的模型字段的名称。你可以适用Django中的__语法遍历"关系路径"来过滤相关模型上的字段。例如:manufacturer__name
  • lookup_expr: 筛选时要适用的字段查找。Django的__语法也可以用来支持查找转换。例如:year__gte
  • exclude: 反转逻辑

此外,字典可用于为每个字段指定多个查找表达式:

from django_filters import rest_framework as filtersclass ProductFilterSet(filters.FilterSet):class Meta:model = Productfields = {"price": ["exact", "lt", "gt"],"release_date": ["exact", "year__gt", "year__lt"]}

上述语句将生成"price", “price__lt”, “price__gt”, “release_date”, “release_date__year__gt”, "release_date__year__lt"过滤器,传入这些参数可以进行过滤操作。

filter_overrides

我们可以在Meta类上使用filter_overrides属性覆盖所有同类models字段的默认过滤器:

class ProductFilter(django_filters.FilterSet):class Meta:model = Productfields = ['name', 'description']filter_overrides = {models.CharField: {'filter_class': django_filters.CharFilter,'extra': lambda f: {'lookup_expr': 'icontains',},}}

那么,“name”, "description"字段过滤将由原来的精确匹配,变成了模糊匹配了!

qs

如果你想要根据request对象来筛选queryset,你可以覆盖qs只读属性。例如,可以将博客文章过滤为已发布的文章和已登录用户拥有的文章(假设是作者的文章草稿):

class ArticleFilterSet(filters.FilterSet):class Meta:model = Articlefields = [...]@propertydef qs(self):parent = super().qsauthor = getattr(self.request, 'user', None)return parent.filter(is_published=True) | parent.filter(author=author)

自定义过滤方法

可以通过指定执行筛选的方法来控制筛选器的行为。在方法参考中查看更多信息。请注意,你可以访问筛选器集的属性,例如request

class ProductFilterSet(filters.FilterSet):username = django_filters.CharFilter(method='my_custom_filter')class Meta:model = Productfields = ['username']def my_custom_filter(self, queryset, name, value):return queryset.filter(**{name: value})

自定义Filter

你可以重写过滤器类的filter()方法,来做一些特殊的事情。如下:

import django_filters
from django.core.validators import EMPTY_VALUESclass MyCharFilter(django_filters.CharFilter):def filter(self, qs, value):if value in EMPTY_VALUES:return qsif self.distinct:qs = qs.distinct()lookup = '%s__%s' % (self.field_name, self.lookup_expr)qs = self.get_method(qs)(**{lookup: value})return qs

重写FilterSet的创建

FilterSet的创建可以通过覆盖后端类上的以下方法进行自定义:

  • .get_filterset(self, request, queryset, view)
  • .get_filterset_class(self, view, queryset=None)
  • .get_filterset_kwargs(self, request, queryset, view)

你可以为每个视图逐个重写这些方法,创建唯一的后端,或者可以使用这些方法编写自己的视图类钩子。

视图属性重命名

几个与视图相关的属性被重命名,以提高与库其他部分的一致性。重命名属性如下:

  • ViewSet.filter_class => filterset_class
  • ViewSet.filter_fields => filterset_fields
  • DjangoFilterBackend.default_filter_set => filterset_base
  • DjangoFilterBackend.get_filter_class => get_filterset_class()
  • FilterMixin.filter_fields => filterset_fields

更多用法

https://django-filter.readthedocs.io/en/main/index.html

http://www.dt0577.cn/news/20503.html

相关文章:

  • 东莞网站推广怎么做软文代写文案
  • 做旅游网站挣钱吗电话营销销售系统
  • 小程序免费制作平台系统百度seo推广
  • 阿里巴巴logo图片专业搜索引擎seo服务
  • 公司网站优化怎么做多少关键词排名优化软件
  • 品牌网站建设 杭州网络营销公司经营范围
  • 中文电商网站模板网站建设方案及报价
  • 天天seo伪原创工具优化电池充电什么意思
  • 网站建设5000费用高德北斗导航
  • 网站如何申请域名淘宝流量平台
  • 网站开发编程工程师招聘浏览器大全网站
  • 吉林市城市建设管理执法局网站网站站点
  • 4s店网站建设方案百度免费网站制作
  • 西安电商网站开发企业网站设计
  • 做网站例子如何进行品牌宣传与推广
  • wordpress动画插件下载新站seo外包
  • 图书翻页的动画 做网站启动用全网热度指数
  • 南阳网站建设多少钱盘搜搜
  • 肇庆网站制作360推广登陆入口
  • 网站keyword如何排列南京百度推广
  • 网站备案 动态ip保定seo外包服务商
  • 做阿里巴巴网站做小程序的公司
  • wordpress 相册 样式下载优化大师
  • 查网站域名备案谷歌seo关键词优化
  • jquery 打开新网站爱站seo查询
  • 内蒙古建设协会网站网络营销的发展概述
  • 网站建设意见征求表爱战网关键词
  • 彩票网站怎么做赚钱北京网站开发
  • 网站设计制作是什么推广app的软文案例
  • refile自己做的网站生活中的网络营销有哪些