专业网站名词解释,wordpress 只收录首页,郑州建站价格,做外贸有哪些好的网站有哪些内容以下案例由浅到深#xff0c;逐步深入#xff0c;通过实例介绍了序列化器的使用方法#xff0c;和其中遇到的常见问题的解决。
一、序列化器serializers.Serializer
1、urls.py
urlpatterns [path(api/str:version/depart/,views.DepartView.as_vie…以下案例由浅到深逐步深入通过实例介绍了序列化器的使用方法和其中遇到的常见问题的解决。
一、序列化器serializers.Serializer
1、urls.py
urlpatterns [path(api/str:version/depart/,views.DepartView.as_view(),namedepart)
]
2、models.py
class Depart(models.Model):title models.CharField(verbose_name部门,max_length32)order models.IntegerField(verbose_name顺序)count models.IntegerField(verbose_name人数)
3、views.py
from rest_framework import serializers# 自定义模型序列化器1Serializer
class DepartSerializer(serializers.Serializer):# 字段名要与模型中的字段一致需要哪个字段写哪个title serializers.CharField()count serializers.IntegerField()class DepartView(APIView):def get(self,request,*args,**kwargs):# 1.数据库中获取数据queryset models.Depart.objects.all()# 2.转换成JSON格式,mangTrue表示有多个值默认为False,有一个值ser DepartSerializer(instancequeryset,manyTrue)# 3.返回给用户,这里对数据进行了在包装返回了一个状态值statuscontext {status:True,data:ser.data}return Response(context)
4、自定义模型序列化器时可以基础ModeSerializer操作起来就更方便
# 自定义模型序列化器2:ModelSerializer
class DepartSerializer(serializers.ModelSerializer):class Meta:model models.Depart# 模型中所有的字段都会拿过来fields __all__
二、针对模型中特殊字段如何序列化问题的解决例如模型中的choices、ForeignKey、Datetime的处理
1、urls.py path(api/str:version/user/, views.UserView.as_view(), nameuser)
2、models.py这个表中模拟了常见的各种数据类型字段
class User(models.Model):name models.CharField(verbose_name姓名,max_length32)age models.IntegerField(verbose_name年龄)gender models.SmallIntegerField(verbose_name性别,choices((1,男),(2,女)))depart models.ForeignKey(verbose_name部门,toDepart,on_deletemodels.CASCADE)ctime models.DateTimeField(verbose_name时间,auto_now_addTrue)3、views.py
# 自定义模型序列化器
class UserSerializer(serializers.ModelSerializer):# gender字段显示出来是整型要想显示对应的string类型需要自定义字段,字段名可以自己定义# 这里主要是介绍 source的用法用来解决模型中choices的问题gender_text serializers.CharField(sourceget_gender_display)# 解决ForeignKey显示对应字段的问题depart serializers.CharField(sourcedepart.title)# 解决Datatime字段显示时间的问题不设定格式显示的带毫秒ctime serializers.DateTimeField(format%Y-%m-%d)class Meta:model models.User# fields __all__ # 显示所有字段fields [name,age,gender,gender_text,depart,ctime] # 指定显示字段class UserView(APIView):def get(self,request,*args,**kwargs):# 1.获取数据queryset models.User.objects.all()# 2.序列化ser UserSerializer(instancequeryset,manyTrue)# 3.返回数据context {status:True,data:ser.data}return Response(context)
4、通过postman测试返回数据