drf中如何设置返回Serializers自定义字段
# 背景
在使用django rest framework进行接口编写时,使用serializers.ModelSerializer
能非常方便快速的生成api接口,面对较为简单的场景时,我们不需要进行过多的定制,但如果接口不仅需要返回models
中的字段,还需要返回一些其他的计算结果时,怎么处理呢?
# 示例
# models.py
from django.db import models
class Book(models.Models):
name = models.CharField(max_length=255, verbose_name='书名')
description = models.TextField(verbose_name='描述')
1
2
3
4
5
2
3
4
5
# views.py
from rest_framework import viewsets
from rest_framework import serializers
from .models import Book
# 仅展示默认字段
class BookSerializers(serializers.ModelSerializer):
class Meta:
model = Book
fields = '__all__'
# 增加自定义字段
class BookSerializers(serializers.ModelSerializer):
book_sale_count = serializers.SerializerMethodField()
class Meta:
model = Book
fields = '__all__'
def get_book_sale_count(self, obj):
# 这里可以通过obj进行一些处理获取销售量然后返回
book_sale_count = ...
return book_sale_count
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 总结
通过serializers.SerializerMethodField
可以实现字段的自定义,但需要注意的是,这个字段是只读的。
更多帮助 (opens new window)
上次更新: 2022/01/20, 04:18:33
- 01
- docker-compose部署openldap12-30
- 02
- 在admin中list_display如何展示外键字段10-10
- 03
- 在admin中list_filter多级外键问题解决10-08