You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.3 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import datetime
from rest_framework import serializers
from django_filters.rest_framework import FilterSet
import django_filters
from app.models import TP
import logging
logger = logging.getLogger('mylogger')
class SerialMyModel(serializers.ModelSerializer):
class Meta:
model = TP
fields = "__all__"
class SerialFilter(FilterSet):
"""
过滤器,支持模糊查询
record_time日期时间格式如 2023-01-01 00:00:00
police_id支持模糊匹配
event_type支持模糊匹配
"""
record_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='icontains')
police_id = django_filters.CharFilter(field_name='police_id', lookup_expr='icontains')
event_type = django_filters.CharFilter(field_name='event_type', lookup_expr='icontains')
# 记录时间范围查询
start_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='gte')
# end_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='lte')
end_time = django_filters.DateTimeFilter(field_name='record_time', method='time_range_filter')
# todo bug: start_time 和 end_time同一天的情况 done
violation = django_filters.NumberFilter(field_name='is_violation', method='is_violation_query')
violation_type = django_filters.CharFilter(field_name='ai_analysis', lookup_expr='icontains')
def time_range_filter(self, queryset, name, value):
"""
@params queryset: 为TP.objects.all()返回的合集, 即视图类中的的queryset
@params name: 为field_name
@params value: 为前端通过end_time字段传过来的值
"""
return queryset.filter(record_time__lte=value + datetime.timedelta(days=1))
def is_violation_query(self, queryset, name, value):
if value == 2:
return queryset
elif value == 1:
return queryset.filter(is_violation=True)
elif value == 0:
return queryset.filter(is_violation=False)
else:
return queryset.filter(is_violation=True)
class Meta:
# 指定模型
models = TP
# 指定需要模糊查询的字段
fields = ("record_time", "police_id", "event_type", "ai_analysis",)