第七篇-2 序列化
表结构:
路由:
class SourceSerializer(serializers.ModelSerializer): def validate_name(self, value): if '草' in value: raise ValidationError('不符合社会主义核心价值观') return value class Meta: model = models.Source fields = "__all__"
视图:
路由:
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = models.Comment
fields = "__all__"
extra_kwargs = {
"content": {"error_messages": {"required": "评论内容不能为空"}},
"article": {"error_messages": {"required": "文章不能为空"}}
}
视图:
路由:
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = models.Tag
fields = "__all__"
class ArticleSerializer(serializers.ModelSerializer):
type = serializers.CharField(source="get_type_display")
tag = TagSerializer(many=True)
class Meta:
model = models.Article
fields = ["id", "title", "type", "source", "tag"]
class ArticleWriteSerializer(serializers.ModelSerializer):
class Meta:
model = models.Article
fields = "__all__"
extra_kwargs = {
"tag": {
"error_messages": {
"does_not_exist": '"{pk_value}"对应的tag对象不存在。'
}
}
}
视图:
路由:
class ArticleHyperlinkedSerializer(serializers.HyperlinkedModelSerializer):
source = serializers.HyperlinkedIdentityField(view_name='source-detail', lookup_field='source_id', lookup_url_kwarg='pk')
class Meta:
model = models.Article
fields = ["id", "type", "title", "source"]
depth = 1
视图:
class ArticleLinked(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all()
ser_obj = ArticleHyperlinkedSerializer(article_list, many=True, context={'request': request})
res["data"] = ser_obj.data
return Response(res)
路由:
class TagSerializer(serializers.ModelSerializer): class Meta: model = models.Tag fields = "__all__" class ArticleSerializer(serializers.ModelSerializer): type = serializers.CharField(source="get_type_display") tag = TagSerializer(many=True) class Meta: model = models.Article fields = ["id", "title", "type", "source", "tag"] class ArticleWriteSerializer(serializers.ModelSerializer): class Meta: model = models.Article fields = "__all__" extra_kwargs = { "tag": { "error_messages": { "does_not_exist": '"{pk_value}"对应的tag对象不存在。' } } }