serializer-ModelSerializer 把某字段处理 成一个对象
时间: 2023-05-27 15:02:54 浏览: 95
可以通过使用 `serializers.SerializerMethodField()` 和定义一个方法来将指定字段序列化为一个对象。
假设有一个 `Book` 模型,其中有一个 `author` 字段,我们希望将其序列化为一个带有 `name` 和 `age` 属性的 `Author` 对象,可以这样做:
```python
from rest_framework import serializers
from myapp.models import Book, Author
class AuthorSerializer(serializers.ModelSerializer):
class Meta:
model = Author
fields = ('name', 'age')
class BookSerializer(serializers.ModelSerializer):
author = serializers.SerializerMethodField()
class Meta:
model = Book
fields = ('title', 'author', 'published_date')
def get_author(self, obj):
return AuthorSerializer(obj.author).data
```
在上面的示例中,定义了一个 `AuthorSerializer`,这个序列化器用于将 `Author` 模型序列化为含有 `name` 和 `age` 字段的字典。然后在 `BookSerializer` 中,将 `author` 字段定义为 `serializers.SerializerMethodField()`,并定义一个 `get_author` 方法,该方法返回 `AuthorSerializer` 序列化出来的数据。这样对 `Book` 模型进行序列化时,就会将 `author` 字段序列化为一个 `Author` 对象了。