序列化类补充 source关键字参数 SerializerMethodField方法

Posted ludingchao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化类补充 source关键字参数 SerializerMethodField方法相关的知识,希望对你有一定的参考价值。

 

models.py

from django.db import models

class Category(models.Model):
    cat_id = models.AutoField(primary_key=True)
    category_name = models.CharField(max_length=50)
    parent = models.ForeignKey(to=Category, to_field=cat_id, related_name="Category", on_delete=models.CASCADE,
                               db_constraint=False, blank=True, null=True)
    p_order = models.IntegerField(default=0)
    is_show = models.BooleanField(default=1)
    image = models.OneToOneField(to=Images, to_field=image_id, on_delete=models.CASCADE, db_constraint=False,
                                 null=True)
    creat_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.category_name


class Images(models.Model):
    image_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=30, default="0")
    image_url = models.ImageField(upload_to="")
    creat_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

 

Cate_ser.py

from rest_framework import serializers
from app01 import models

class Cate_ser(serializers.ModelSerializer):
    image_url = serializers.ImageField(source=image.image_url)    # source关联到image表,代替了models表中的property自定义字段
    parent_id = serializers.SerializerMethodField() # 给自定义字段定义规则

    def get_parent_id(self,obj):        # 必须以get开头定义parent_id的获取属性
        if obj.parent_id is None:
            return 0
        else:
            return obj.parent_id

    class Meta:
        model = models.Category
        fields = __all__

技术图片

 

category.py

from rest_framework.views import APIView
from rest_framework.response import Response
from app01 import models
from app01.my_ser import Cate_ser

class List(APIView):
    def post(self,request):
        data = models.Category.objects.filter(is_show=True)
        data = Cate_ser.Cate_ser(instance=data,many=True,context={request:request}).data
        return Response({
            code:200,
            msg:ok,
            data:data
        })

 

以上是关于序列化类补充 source关键字参数 SerializerMethodField方法的主要内容,如果未能解决你的问题,请参考以下文章

YARN学习总结补充+zookeeper安装

类和对象——补充(运算符重载,static和explicit关键字和友元,内部类)

Flume参数小结

函数参数补充名称空间与作用域global与nonlocal

给Fruit类添加Serializable接口(承接上一文章的补充)

序列化组件的基本使用