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.

61 lines
2.3 KiB
Python

2 years ago
import datetime
from rest_framework import serializers
from django_filters.rest_framework import FilterSet
import django_filters
from app.models import XZNSH
2 years ago
import logging
logger = logging.getLogger('mylogger')
2 years ago
class SerialMyModel(serializers.ModelSerializer):
class Meta:
model = XZNSH
2 years ago
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')
scene = django_filters.CharFilter(field_name='scene', lookup_expr='icontains')
2 years ago
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')
2 years ago
violation_type = django_filters.CharFilter(field_name='violation_reason', lookup_expr='icontains')
2 years ago
def time_range_filter(self, queryset, name, value):
"""
@params queryset: 为objects.all()返回的合集, 即视图类中的的queryset
2 years ago
@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 = XZNSH
2 years ago
# 指定需要模糊查询的字段
fields = ("record_time", "scene", "event_type", "ai_analysis",)
2 years ago