网络编程
位置:首页>> 网络编程>> Python编程>> django filters实现数据过滤的示例代码

django filters实现数据过滤的示例代码

作者:一只努力的程序猿@  发布时间:2023-11-20 03:59:22 

标签:django,filters,数据过滤

常用

当前循环.作用
default数据为空时设置默认值
length取变量长度
filesizeformat文件大小转成可读
slice从指定位置到指定位切片
datedatetime取到的时间,转成指定格式
safe防止XSS攻击、加上safe才能传标签
truncatechars取摘显示一段剩下的…

例子


{#格式   值|函数#}
{#    如果没有值,那么使用默认值#}
   <p>{{ bucunzai|default:'空的哦' }}</p>

{#    取出变量长度#}
   <q>{{ name }}--{{ name|length }}</q>

{#      文件大小转换成可读型  kb 自动转成bm、g、tb#}
   <p>文件大小{{ file_size|filesizeformat }}</p>

{#    切片 从指定位置到指定位 ,例:第3位到-2位#}
   <p>切片:{{ slice_str|slice:'3:-2' }}</p>

{#    把datetime取到的时间,转成指定格式#}
   <p>格式化:{{ now|date:'Y-m-d H:i:s' }}</p>

{#    如果后端内容包含标签,那么加上safe 才能转义(防止用户直接加script标签作弊)防XSS攻击#}
   <p>{{ h_html|safe }}</p>

{#    取摘要只显示一段,指定取长度后面...例:120个字符 #}
   <p>长文本:{{ p_str|truncatechars:12 }}</p>

1、视图


class UserView(ListAPIView):
   """用户列表"""
   queryset = User.objects.all()
   serializer_class = UserSerializer
   filter_backends = (DjangoFilterBackend,)
   filter_class = UserMonthFilter  # 指定过滤类

2、过滤类


class RobotFilter(django_filters.FilterSet):
   # 使用过滤:URL?created_start_time=2020_01-20&created_end_time=2020_01-21
   robot_id = django_filters.CharFilter(field_name='id')
   machine_id = django_filters.CharFilter(field_name='machine_id')
   city = django_filters.CharFilter(field_name='city')
   # lookup_expr(可选)为判断条件,field_name(必选)为模型类属性,created_time查询字符串
   created_time= django_filters.CharFilter(field_name='created_at', lookup_expr='startswith')
   created_start_time = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='gt')
   created_end_time = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='lt')
   problem_isnull = django_filters.BooleanFilter(field_name='problem', lookup_expr='isnull')
   name = django_filters.CharFilter(lookup_expr='iexact')  # iexact表示精确匹配, 并且忽略大小写
   author = django_filters.CharFilter(lookup_expr='icontains') #icontains表示模糊查询(包含),并且忽略大小写
   price = django_filters.NumberFilter(look_expr='exact')  #exact表示精确匹配
   task_res_state = django_filters.CharFilter(method="get_task_res_state")

def get_task_res_state(self, queryset, *arg):
       if str(arg[1]) == "0":  # arg[1]=('task_res_state', '0')
           task_res = (1, 2, 3)
       else:
           task_res = (0, 4, 5, 6)
       print(task_res)
       queryset = queryset.filter(task_res__in=task_res)
       return queryset
   class Meta:
       model = Robot
       fields = ['robot_id', 'machine_id', "city", "created_start_time", "created_end_time", 'created_time',
                 'firmware_version', 'state', "robot_type", "hardware_version", "exist_map", 'task_res_state']

来源:https://blog.csdn.net/weixin_41449756/article/details/94869023

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com