序列化类补充 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
        })

原文地址:https://www.cnblogs.com/ludingchao/p/12507753.html

时间: 2024-10-19 14:52:25

序列化类补充 source关键字参数 SerializerMethodField方法的相关文章

android传递参数的方法

Android由众多Activity组成,每个Activity对应不同的功能和UI,但是每个Activity都是一个单独的类,所以需要传递参数.一般来讲,Android中传递参数是在不同的Activity中.大致上有5类方案: 1 静态 static 定义方法: 1 public class MainActivity extends TabActivity { 2 public static DatabaseHelper mHelper; 3 public static SQLiteDataba

resfframework中修改序列化类的返回值

在序列化类中重写to_representation(self,instance)方法,这个是返回json对象的方法,返回的是一个待序列化的对象,可以直接对这个类进行定制,有关关联查询也可以在这里进行定制,例如 def to_representation(self, instance): res = super().to_representation(instance=instance) res["gitGroup"] = {"name": instance.gitG

Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访问, 类,方法,成员变量 private 权限修饰符,私有访问, 方法,成员变量 static 静态修饰符 方法,成员变量 final 最终修饰符 类,方法,成员变量,局部变量 abstract 抽象修饰符 类 ,方法 我们编写程序时,权限修饰符一般放于所有修饰符之前,不同的权限修饰

Java中创建对象的5种方式 &&new关键字和newInstance()方法的区别

转载:http://www.kuqin.com/shuoit/20160719/352659.html 用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. newInstance( )是一个方法,而new是一个关键字,其次,Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用new关键字生成对象没有这个限制.Cla

c#图像处理入门(-bitmap类和图像像素值获取方法)

c#图像处理入门 -bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下: 1. GetPixel方法和SetPixel方法:获取和设置一个图像的指定像素的颜色. 2. PixelFormat属性:返回图像的像素格式. 3. Palette属性:获取和设置图像所使用的颜色调色板. 4. Height Width属性:返回图像的高度和

[java]final关键字、finally关键字与finalize()方法

final关键字: final关键字通常指的是“无法改变的”,使用“无法改变”这样修饰可能出于两个原因:设计或者效率. final可以修饰变量.方法和类. 一.final变量 一个既是static又是final的域只占据一段不能改变的存储空间. 当对对象引用而不是基本类型运用final修饰时,其含义会有一点迷惑.对于基本类型,final使数值恒定不变.而用于对象引用,final使引用恒定不变.一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象.然而,对象自身却是可以修改的,java并未

S1/使用Java理解程序逻辑/14- 带参数的方法

定义类的方法一般格式. 语法: <访问修饰符>   返回值类型    <方法名> (<参数列表>) { //方法的主体 } 其中: 1.<访问修饰符>指该方法允许被访问的权限范围,只能是public.protected或private.其中public访问修饰符表示该方法可以被任何其他代码调用. 2.返回值类型指方法返回值的类型.如果方法不返回任何值,他应该声明为void类型.Java对待返回值的要求很严格,方法返回值必须与所说明的类型相匹配.使用retur

一天一个Java类之Java关键字

关键字含义 abstract表明类或者成员方法具有抽象属性 assert用来进行程序调试 boolean基本数据类型之一,布尔类型 break提前跳出一个块 byte基本数据类型之一,字节类型 case用在switch语句之中,表示其中的一个分支 catch用在异常处理中,用来捕捉异常 char基本数据类型之一,字符类型 class类 const保留关键字,没有具体含义 continue回到一个块的开始处 default默认,例如,用在switch语句中,表明一个默认的分支 do用在do-whi

Oracle数据库中调用Java类开发存储过程、函数的方法

Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL,除此之外,还可以用时下最流行的编程语言Java来做开发.随着对oracle的了解越来越多,越来越禁不住oracle的诱惑,oracle技术真的是一门很有趣的学问.之前,我在博客中总结了挺多有关SQL.PL/SQL的,但是对于oracle数据库中Java类的调用却没有总结,也是因为之前不太会,这会儿总