在django中,模型级别器是由Django Rest框架(DRF)提供的强大功能,它简化了沿JSON格式的Django模型实例序列化和进行序列化的过程。它会自动生成用于Django模型的串行器类,从而减少处理序列化和避难所所需的样板代码的数量。
Modelialializer从DRF提供的串行器类继承,专门设计用于使用Django模型。它为大多数序列化和次要化操作提供了默认实现,从而易于使用复杂的模型。
要使用Modelialializer,您需要为要通过API展示的每个DJANGO模型定义一个序列化类别。串行器类通常在应用程序中的serializers.py文件中定义。
# models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
published_date = models.DateField()
is_published = models.BooleanField(default=False)
现在,让我们为Book
模型创建一个模特器:
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
在上面的代码中,我们有一个带有三个字段(title
,author
和published_date
)的Book
模型。 BookSerializer
是一个模型级化合物,可映射到Book
模型,并包含序列化中的所有字段。
现在,让我们探索Modelializer的Meta类中的字段和选项:
-
model
:- 指定与串行器关联的Django模型。
-
fields
:- 使用
fields
将模型的特定字段包括在序列化器中。 -
fields
的特殊值:-
'__all__'
:包括序列化器中模型的所有字段。 -
['field1', 'field2', ...]
:仅包含序列化器中模型的指定字段。 -
('field1', 'field2', ...)
:与列表格式相同,仅包括模型中的指定字段。 -
[]
:排除模型中的所有字段。您可以手动在串行器中包含特定字段。
-
- 使用
-
exclude
:- 使用
exclude
指定应从序列化器中排除的字段。
- 使用
# Example with 'fields' and 'exclude':
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['title', 'published_date']
# exclude = ['is_published']
-
冷17:
- 使用
read_only_fields
来指定当避免数据时应读取的字段。这些字段不包含在更新或创建操作中。
- 使用
# Example with 'read_only_fields':
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
read_only_fields = ['is_published']
-
extra_kwargs
:- 使用
extra_kwargs
为特定字段(例如自定义验证,格式化等)提供额外的选项。
- 使用
# Example with 'extra_kwargs':
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
extra_kwargs = {
'title': {'required': True}, # Field-level validation
'published_date': {'format': '%Y-%m-%d'} # Custom date format
}
使用ModeleRializer,您可以有效地将复杂的DJANGO模型序列化并进行序列化,并轻松与API视图进行交互。它可以使您免于编写重复序列化和反序列化代码,从而使Django REST API的开发更快,更方便。