django通过Serializers查询时,添加新的自定义字段到原有字段中
时间: 2023-07-16 09:15:37 浏览: 77
django自带serializers序列化返回指定字段的方法
在 Django 中使用 Serializer 对象进行查询时,可以通过自定义字段来扩展原有的字段。一种常见的实现方式是使用 SerializerMethodField,该字段可以接受一个方法作为参数,并返回该方法的返回值作为该字段的值。
下面是一个示例代码,假设我们有一个名为 Book 的模型,其中包含 title 和 author 两个字段。我们想要添加一个自定义字段 full_name,表示书籍的完整名称(包含作者名字和书名):
```python
from rest_framework import serializers
from myapp.models import Book
class BookSerializer(serializers.ModelSerializer):
full_name = serializers.SerializerMethodField()
class Meta:
model = Book
fields = ('title', 'author', 'full_name')
def get_full_name(self, obj):
return f"{obj.title} by {obj.author}"
```
在上面的代码中,我们定义了一个名为 full_name 的自定义字段,并将其添加到了 fields 列表中。在 get_full_name 方法中,我们使用 obj 参数获取当前序列化的 Book 实例,并返回一个字符串,表示该实例的完整名称。
现在,当我们使用该序列化器进行查询时,会自动加上 full_name 字段,比如:
```python
from myapp.models import Book
from myapp.serializers import BookSerializer
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
print(serializer.data)
```
输出结果如下:
```
[
{"title": "The Great Gatsby", "author": "F. Scott Fitzgerald", "full_name": "The Great Gatsby by F. Scott Fitzgerald"},
{"title": "To Kill a Mockingbird", "author": "Harper Lee", "full_name": "To Kill a Mockingbird by Harper Lee"},
...
]
```
可以看到,full_name 字段已经成功地添加到了序列化器的输出结果中。
阅读全文