django restframework serializer 增加自定义字段

在使用django restframework serializer 序列化在django中定义的model时,有时候我们需要额外在serializer中增加一些model中没有的字段。有两种方法实现这个目的。

假设现在有一个Animal模型,其中有name, type, country字段,country为外键。我们在序列化Animal时,需要额外增加外键country的area信息。

方法一:

1.首先,在django的model中定义property

class Animal(models.Model):
    name = models.CharField(max_length=50, default=‘‘)
    type = models.CharField(max_length=50, default=‘‘)
    country = models.ForeignKey(Country, blank=True, null=True)

    @property
    def country_area(self):
        return self.country.area
  

2.然后在定义django restframework的serializer时,使用字段的source参数指向我们上面定义好的property

class AnimalSerializer(serializers.Serializer):
    pk = serializers.IntegerField(read_only=True)
    name = serializers.CharField(max_length=50)
    type = serializers.CharField(max_length=50)
    country = serializers.PrimaryKeyRelatedField(read_only=True)
    country_area = serializers.FloatField(required=False, source=‘country_area’)

方法二:

不修改django的model,直接使用SerializerMethodField(method_name=None)字段

class AnimalSerializer(serializers.ModelSerializer):
    country_area = serializers.SerializerMethodField()

    class Meta:
        model = Animal
        fields = (‘id‘, ‘name‘, ‘type‘,‘country‘,‘country_area‘)

    def get_country_area(self, obj):
        return obj.country.area 

几点说明:

  1. SerializerMethodFiel是一个read-only字段
  2. 当不指定其method_name时,默认为get_<field_name>
  3. 如果使用ModelSerializer并指定字段时,要包含此时定义的字段

原文地址:https://www.cnblogs.com/zhaoyingjie/p/9237887.html

时间: 2024-08-30 05:39:16

django restframework serializer 增加自定义字段的相关文章

SD--如何在输出控制中增加自定义字段

在sap的输出控制中,我们有时需要增加系统未定义的字段作为条件表的字段,为了实现该需求我们就需要修改增强. 输出控制用到的通讯结构 KOMKBK1 (Output Determination Communication Area CAS Appl. K1) KOMKBV1 (Output Determination Communication Area Header Appl. V1) KOMKBV2 (Output Determination Communication Area Header

Asp.net Identity 修改默认数据库,增加自定义字段

visual studio 2013 先新建一个项目 选择MVC,确定 打开 Views\Shared\_Layout.cshtml文件,按自己的要求修改 改 [html] view plain copy print? <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> &l

帝国cms全文搜索 增加自定义字段搜索

帝国cms全站搜索功能只能调出固定的几个字段,如果想搜索其他字段的值,这时我们应该怎么办呢?开拓族网站有这个需求,所以研究了一下帝国的全站搜索,后来发现在/e/sch/index.php中可以直接对数据库进行操作于是所有问题就解决了,我们只要直接更改index.php里面的源码就行了. 之所以不能调用其他字段的值是因为,帝国预设了几个搜索字段,如下代码: $infor=$empire->fetch1("select id,classid,titlepic,newstime,isurl,ti

cas 持久化TGT到mysql JPA方式 增加自定义字段

springboot2.0配置多数据源: spring.datasource.primary.url=jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8&useSSL=truespring.datasource.primary.username=rootspring.datasource.primary.password=rootspring.datasource.primary.driver-

从原理上教你如何删除织梦dedecms自定义字段

由于dedecms后台没有提供删除自定义字段的方法,我们只能自己手动操作删除,下面的内容是删除的方法和原理. 一.增加一个自定义字段,用于下面的示例中讲解删除. "核心-频道模型-内容模型管理",选择"普通文章-字段管理-添加新字段" 注意红色框选的地方,后面的讲解会说到. 二. 删除方法: 1.第一步,"核心-频道模型-内容模型管理",选择"普通文章-字段管理",删除"模型字段配置"中新增加的内容,即下图

Django现有模型增加字段

对于Django已经存在的模型中需要增加一个字段,如何实现? 首先在model.py文件中找到对应的模型名称,加入需要增加的字段 然后python manage.py sqlall 数据库名 找到新增加的字段的sql语句,记录下来 再执行python manage.py shell 执行如下命令 from django.db import connection cursor=connection.cursor() cursor.execute('ALTER TABLE tablename ADD

禅道 给禅道缺陷增加是否遗留及来源渠道自定义字段

给禅道缺陷增加是否遗留及来源渠道自定义字段 by:授客 QQ:1033553122 实践环境 禅道项目管理软件9.2.1 .8.0开源Linux版 给数据库表zt_bug新增自定义字段 ALTER TABLE `zt_bug` ADD COLUMN isHistory VARCHAR(10) AFTER severity; ALTER TABLE `zt_bug` ADD COLUMN channel VARCHAR(50) AFTER severity; 修改zentaopms/module/

Django rest framework 使用自定义认证方式

Django rest framework 使用自定义认证方式 Django使用自定义认证方式 介绍了 "Django使用自定义认证方式",这一篇说说怎样在前一篇的基础上提供rest api. 修改settings.py中INSTALLED_APPS,添加 'login' app. 给login app增加serializers.py文件 #coding:utf-8 from django.contrib.auth.models import User from rest_framew

Django中ORM介绍和字段及其参数

ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用. ORM的由来 字母‘O’起源于“对象”(Object),'R'代表“关系”(Relational). 几乎所有的软件开发过程中都会涉及到对象和关系数据库.在用户层面和业务逻辑层