当前位置:网站首页>DRF learning notes (III): model class serializer modelserializer
DRF learning notes (III): model class serializer modelserializer
2022-07-27 16:18:00 【fresh_ nam】
List of articles
Preface
When we have many models , Write a corresponding serializer for each model , It will be very inconvenient .DRF For us ModelSerializer Model class serializer to help us quickly create a Serializer class .
ModelSerializer And conventional Serializer identical , But provided :
(1) Automatically generate a series of fields based on the model class
(2) Based on the model class, automatically create Serializer Generate validators, such as unique_together
(3) Contains the default create() and update() The implementation of the
One 、ModelSerializer Use
1、 stay demo/serializers Modify the ClassInfoSerializer
class ClassInfoSerializer(serializers.ModelSerializer):
""" Class data serializer """
# id = serializers.IntegerField(label='ID', read_only=True)
# number = serializers.IntegerField(label=' Class number ', required=False)
# grade = serializers.CharField(label=' grade ', max_length=3, required=False)
# studentinfo_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) # add to
class Meta:
model = ClassInfo
fields = '__all__'
result :
>>> from demo.serializers import ClassInfoSerializer
>>> serializer = ClassInfoSerializer()
>>> serializer
ClassInfoSerializer():
id = IntegerField(label='ID', read_only=True)
number = IntegerField(label=' Class number ', max_value=2147483647, min_value=-2147483648)
grade = ChoiceField(choices=((' In grade one ', ' In grade one '), (' second grade ', ' second grade '), (' Third grade ', ' Third grade ')), label=' grade ')
Two 、 Indicate field
1、 Use fields To define the fields ,__all__ The table name contains all the fields , You can also specify which fields , Such as :
class ClassInfoSerializer(serializers.ModelSerializer):
""" Class data serializer """
class Meta:
model = ClassInfo
fields = ('number', 'grade')
result :
>>> from demo.serializers import ClassInfoSerializer
>>> serializer = ClassInfoSerializer()
>>> serializer
ClassInfoSerializer():
number = IntegerField(label=' Class number ', max_value=2147483647, min_value=-2147483648)
grade = ChoiceField(choices=((' In grade one ', ' In grade one '), (' second grade ', ' second grade '), (' Third grade ', ' Third grade ')), label=' grade ')
2、 Use exclude Which fields can be explicitly excluded :
class ClassInfoSerializer(serializers.ModelSerializer):
""" Class data serializer """
class Meta:
model = ClassInfo
exclude = ('id',)
result :
>>> from demo.serializers import ClassInfoSerializer
>>> serializer = ClassInfoSerializer()
>>> serializer
ClassInfoSerializer():
number = IntegerField(label=' Class number ', max_value=2147483647, min_value=-2147483648)
grade = ChoiceField(choices=((' In grade one ', ' In grade one '), (' second grade ', ' second grade '), (' Third grade ', ' Third grade ')), label=' grade ')
3、 Default ModelSerializer Use the primary key as the associated field , But we can use depth To simply generate nested representations ,depth It should be an integer , Indicates the number of nested levels . Such as :
class StudentInfoSerializer(serializers.ModelSerializer):
""" Student data serializer """
class Meta:
model = StudentInfo
fields = '__all__'
depth = 1
There are no hierarchical results :
>>> from demo.serializers import StudentInfoSerializer
>>> serializer = StudentInfoSerializer()
>>> serializer
StudentInfoSerializer():
id = IntegerField(label='ID', read_only=True)
name = CharField(label=' full name ', max_length=10)
sex = ChoiceField(choices=((' male ', ' male '), (' Woman ', ' Woman ')), label=' Gender ')
from_class = PrimaryKeyRelatedField(queryset=ClassInfo.objects.all())
Hierarchical results :
>>> from demo.serializers import StudentInfoSerializer
>>> serializer = StudentInfoSerializer()
>>> serializer
StudentInfoSerializer():
id = IntegerField(label='ID', read_only=True)
name = CharField(label=' full name ', max_length=10)
sex = ChoiceField(choices=((' male ', ' male '), (' Woman ', ' Woman ')), label=' Gender ')
from_class = NestedSerializer(read_only=True):
id = IntegerField(label='ID', read_only=True)
number = IntegerField(label=' Class number ', max_value=2147483647, min_value=-2147483648)
grade = ChoiceField(choices=((' In grade one ', ' In grade one '), (' second grade ', ' second grade '), (' Third grade ', ' Third grade ')), label=' grade ')
3、 ... and 、 Add extra parameters
We can use extra_kwargs Parameter is ModelSerializer Add or modify the original option parameters :
class ClassInfoSerializer(serializers.ModelSerializer):
""" Class data serializer """
class Meta:
model = ClassInfo
exclude = ('id',)
extra_kwargs = {
'number': {
'min_value': 0}
result :
>>> from demo.serializers import ClassInfoSerializer
>>> serializer = ClassInfoSerializer()
>>> serializer
ClassInfoSerializer():
number = IntegerField(label=' Class number ', max_value=2147483647, min_value=0)
grade = ChoiceField(choices=((' In grade one ', ' In grade one '), (' second grade ', ' second grade '), (' Third grade ', ' Third grade ')), label=' grade ')
That's all for serialization , The next chapter will talk about DRF View content of
Next chapter :DRF Learning notes ( Four ):DRF View
边栏推荐
- These questions~~
- JMeter5.3 及以后的版本jmeter函数助手生成的字符在置灰无法复制
- Nacos
- Delete node quickly and efficiently_ modules
- Join hands with sifive, Galanz will enter the semiconductor field! Exposure of two self-developed chips
- Oracle 常用语句
- Live broadcast software development, customized pop-up effect of tools
- Common Oracle statements
- Hematemesis finishing c some commonly used help classes
- Six capabilities of test and development
猜你喜欢

Understand │ what is cross domain? How to solve cross domain problems?

渗透测试-干货 | 80篇+网络安全面试经验帖(面试篇)

flume增量采集mysql数据到kafka

微信小程序个人号开通流量主

Time series ARIMA model

使用transform:translate()出现内容模糊问题

判断数据的精确类型

Flume incrementally collects MySQL data to Kafka

Security software related to wireless network analysis (airtrack ng)

Solve the problem that Flink cannot be closed normally after startup
随机推荐
Determine the exact type of data
C语言实现字节流与十六进制字符串的相互转换
DEX and AMMS of DFI security
台积电6纳米制程将于明年一季度进入试产
Excel提取重复项
4-digit random data
DRF学习笔记(一):数据序列化
Mapreduce实例(二):求平均值
快速高效删除node_modules
判断数据的精确类型
一款功能强大的Web漏洞扫描和验证工具(Vulmap)
Pycharm导入已有的本地安装包
Short video mall system, system prompt box, confirmation box, click blank to close the pop-up box
台积电的反击:指控格芯侵犯25项专利,并要求禁售!
webRTC中的coturn服务安装
Coturn service installation in webrtc
Pycharm导入已有的Project
Live broadcast software development, customized pop-up effect of tools
JSP基础
Embedded development: tips and techniques -- seven techniques to meet the real-time deadline