DRF笔记-自定义序列化字段

DRF笔记-自定义序列化字段

表结构:(一对多)

  • 班级ClassRoom:id、classname。

  • 学生Student:id、name、gender、room(外键)。

  • 表数据如下所示:

  • 在这里插入图片描述1.models.py:

from django.db import models


class ClassRoom(models.Model):
    """班级模型类"""
    classname = models.CharField(max_length=10, verbose_name='班级名称')

    class Meta:
        db_table = 'classroom'
        verbose_name = '班级信息表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.classname


class Student(models.Model):
    """学生模型类"""
    name = models.CharField(max_length=10, verbose_name='学生姓名')
    GENDER_CHOICES = (
        (0, '女'),
        (1, '男'),
        (2, '未知')

    )
    gender = models.SmallIntegerField(choices=GENDER_CHOICES, verbose_name='学生性别')
    room = models.ForeignKey(to='ClassRoom', on_delete=models.CASCADE)

    class Meta:
        db_table = 'student'
        verbose_name = '学生信息表'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name

2.serializers.py

from .models import ClassRoom, Student
from rest_framework import serializers


class ClassRoomSerializer(serializers.ModelSerializer):

    class Meta:
        model = ClassRoom
        fields = '__all__'


class StudentSerializer(serializers.ModelSerializer):
    gender_list = serializers.CharField(source='get_gender_display', read_only=True)  # 自定义显示字段(男、女)
    roomc = serializers.CharField(source='room.classname', read_only=True)

    class Meta:
        model = Student
        fields = ('name', 'gender', 'room', 'roomc',  'gender_list')  # 加入自定义的字段:gender_list,roomc
        # fields = '__all__'
        extra_kwargs = {
            'gender': {'write_only': True}, # get时不显示,post时需要填写该字段
            'room': {'write_only': True}  # get时不显示,post时需要填写该字段
        }

3.app:urls.py

from django.urls import path
from .views import StudentView


urlpatterns = [
    path('students/', StudentView.as_view()),
]

4.project:urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('app04.urls')),

]
测试:

get请求:http://127.0.0.1:8000/api/students/,显示自定义字段
在这里插入图片描述post请求:http://127.0.0.1:8000/api/students/ ,添加一个学生
在这里插入图片描述
在这里插入图片描述

结束…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值