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.

85 lines
2.5 KiB
Python

import datetime
from rest_framework import serializers
from django_filters.rest_framework import FilterSet, DjangoFilterBackend
import django_filters
from user.models import UserProfile, Department
import logging
from django.contrib.auth.hashers import make_password
logger = logging.getLogger('mylogger')
class UserSerializer(serializers.ModelSerializer):
department_name = serializers.SerializerMethodField()
def to_internal_value(self, data):
password = data.get("password")
if password:
data["password"] = make_password(password)
ret = super().to_internal_value(data)
return ret
def to_representation(self, instance: UserProfile):
ret = super().to_representation(instance)
ret["gender_display"] = instance.get_gender_display()
ret["department_id"] = instance.department_id
return ret
def get_department_name(self, obj: UserProfile):
department_name = ""
if obj.department:
department_name = obj.department.name
return department_name
class Meta:
model = UserProfile
fields = "__all__"
extra_kwargs = {
"password": {"write_only": True},
}
class UserFilter(FilterSet):
"""
过滤器,支持模糊查询
"""
# department_id = django_filters.NumberFilter(field_name='department')
username = django_filters.CharFilter(field_name='username', lookup_expr='icontains')
phone_number = django_filters.CharFilter(field_name='phone_number', lookup_expr='icontains')
is_superuser = django_filters.BooleanFilter(field_name='is_superuser')
is_active = django_filters.BooleanFilter(field_name='is_active')
class Meta:
# 指定模型
models = UserProfile
# 指定需要模糊查询的字段
fields = ("username", "phone_number", "is_superuser", "is_active")
class DepartmentSerializer(serializers.ModelSerializer):
class Meta:
model = Department
fields = "__all__"
depth = 1
class DepartmentFilter(FilterSet):
"""
过滤器,支持模糊查询
"""
name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
parent_id = django_filters.NumberFilter(field_name='parent_id')
department_id = django_filters.NumberFilter(field_name='id')
is_active = django_filters.BooleanFilter(field_name='is_active')
class Meta:
# 指定模型
models = Department
# 指定需要模糊查询的字段
fields = ("name", "parent_id", "department_id", "is_active")