Django_framework_模型序列化器ModelSerializer
再看一下接口的模型类:
之前定义的projects/model.py
from django.db import models
# Create your models here.
class Interfaces(models.Model):
# 创建Projects模型类
name = models.CharField(verbose_name="接口名称",max_length=200,unique=True,help_text="接口名称")
method = models.CharField(verbose_name="接口类型",max_length=50,help_text="接口类型")
desc = models.TextField(verbose_name="简要描述",max_length=200,help_text="简要描述",blank=True,default="")
#外键
# 第一个参数为关联的模型路径(应用名.模型类)
#第二个参数为副表删除后,该字段的处理方式
#CASCADE:子表也会被删除
#SET_NULL:当前外键会被设置为None
# PROJECT:会报错
# SET_DEFAULT:设置默认值同时需要指定默认值,null=True
project = models.ForeignKey('projects.Projects',on_delete=models.CASCADE,
verbose_name="所属项目",help_text="所属项目",null=True, blank=True)
#设定数据库名称等信息
class Meta:
db_table="tb_interfaces"
verbose_name="接口"
verbose_name_plural="接口"
定义interfaces/serializer.py
文件
from rest_framework import serializers
from interfaces.models import Interfaces
class ProjectsModelSerializer(serializers.ModelSerializer):
class Meta:
model = Interfaces
fields = "__all__"
我们看一下ipython
结果:
from interfaces.serializer import ProjectsModelSerializer
ProjectsModelSerializer()
Out[4]:
ProjectsModelSerializer():
id = IntegerField(label='ID', read_only=True)
name = CharField(help_text='接口名称', label='接口名称', max_length=200, validators=[<UniqueValidator(queryset=Interfaces.objects.all())>])
method = CharField(help_text='接口类型', label='接口类型', max_length=50)
desc = CharField(allow_blank=True, help_text='简要描述', label='简要描述', max_length=200, required=False, style={'base_template': 'textarea.html'})
project = PrimaryKeyRelatedField(allow_null=True, help_text='所属项目', label='所属项目', queryset=Projects.objects.all(), required=False)
发现会自动生成外键的字段,
数据库中的外键字段,默认会生成PrimaryKeyRelatedField
序列化字段,
序列化输出的值为外键的ID值;
- 获取单条数据,看一下
shell
中的结果
from interfaces.serializer import InterfacesModelSerializer
from interfaces.models import Interfaces
one_obj = Interfaces.objects.get(id= 4)
InterfacesModelSerializer(one_obj).data
Out[5]: {'id': 4, 'name': '登录接口', 'method': 'post', 'desc': '登录接口', 'project': 10}
2. 修改为StringRelatedField
from rest_framework import serializers
from interfaces.models import Interfaces
project = serializers.StringRelatedField(label='所属项目')
class InterfacesModelSerializer(serializers.ModelSerializer):
class Meta:
model = Interfaces
fields = "__all__"
from interfaces.serializer import InterfacesModelSerializer
from interfaces.models import Interfaces
one_obj = Interfaces.objects.get(id= 4)
InterfacesModelSerializer(one_obj).data
Out[5]: {'id': 4, 'name': '登录接口', 'method': 'post', 'desc': '登录接口', 'project': 10}
发现此字段被序列化为关联对象字符串表达式形式,(即__str__
)方法返回值
3.使用SlugRelatedField
SlugRelatedField
被序列化为关联对象的指定字段数据
from rest_framework import serializers
from interfaces.models import Interfaces
# project = serializers.StringRelatedField(label='所属项目')
project = serializers.SlugRelatedField(slug_field='tester')
class InterfacesModelSerializer(serializers.ModelSerializer):
class Meta:
model = Interfaces
fields = "__all__"
来源:CSDN
作者:静静要变优秀啊_
链接:https://blog.csdn.net/qq_34400745/article/details/103463363