前端给后端表添加一个自定义字段

class UserViewSet(viewsets.ModelViewSet): """ 完成产品的增删改查 """ queryset = User.objects.all() serializer_class = UserSerializer # 优先使用 get_serializer_class 返回的序列化器 # # 1.认证:自定义认证类, 自定义会覆盖全局配置 authentication_classes = (BasicAuthentication, SessionAuthentication) # 2.权限:自定义权限类 # permission_classes = (MyPermission,) # 3.分页:自定义分页器 覆盖全局配置 pagination_class = PageNum # 4.限流:自定义限流类 throttle_classes = [UserRateThrottle] # 5.过滤:指定过滤方法类, 排序方法类, 一个或多个 filter_backends = (DjangoFilterBackend, OrderingFilter) # 同时支持过滤和排序 # 5.1指定排序字段, 不设置, 排序功能不起效 ordering_fields = ('date_joined', 'id') # ?ordering=-id # 5.2指定过滤字段, 不设置, 过滤功能不起效 filter_fields = ('username', 'mobile',) # ?username = tom & phone = & is_active = true # 根据不同的请求, 获得不同的序列化器 def get_serializer_class(self): if self.action == 'unactived': return UserUnActiveSerializer else: return UserSerializer @action(methods=['get'], detail=False) def unactived(self, request, *args, **kwargs): # 获取查询集, 过滤出未激活的用户 qs = self.queryset.filter(is_active=False) # 使用序列化器, 序列化查询集, 并且是 ser = self.get_serializer(qs, many=True) return Response({"code":200,"msg":"成功","data":ser.data}) @action(methods=['get'], detail=False) def actived(self, request, *args, **kwargs): # 获取查询集, 过滤出未激活的用户 qs = self.queryset.filter(is_active=True) # 使用序列化器, 序列化查询集, 并且是 ser = self.get_serializer(qs, many=True) return Response({"code":200,"msg":"成功","data":ser.data}) #自定义字段多添加一个字段,这个字段表里不存在 def perform_create(self, serializer): user_obj = serializer.save() role_ids = self.request.data.get('choiseRole') if role_ids: for role_id in role_ids: UserRole.objects.create(user_id=user_obj.id, role_id=role_id)

class UserSerializer(serializers.ModelSerializer): def validate(self,attrs): return attrs class Meta: model=User fields='__all__' read_only_fields=('',) extra_kwargs={ "address":{ "min_length":5, "default":"默认测试地址" } } filter_fields = ('username',)

from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser): """用户信息""" username=models.CharField('用户名字',max_length=32,unique=True) password=models.CharField('用户密码',max_length=128) mobile=models.CharField('手机号',max_length=20,null=True,blank=True) email = models.EmailField('邮箱',null=True,blank=True)