前端給后端表添加一個自定義字段

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)