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