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")