django modelserializer 增加 一个 外键 字段 作为新字段
时间: 2023-05-27 18:06:04 浏览: 102
假设我们有两个模型,一个是`Author`,另一个是`Book`,`Book`模型有一个外键字段指向`Author`模型。我们想要在`BookSerializer`中增加一个`author_name`字段来显示书籍作者的姓名。
首先,在`BookSerializer`中定义`author_name`字段:
```python
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
author_name = serializers.CharField(source='author.name', read_only=True)
class Meta:
model = Book
fields = ['id', 'title', 'author', 'author_name']
```
在`author_name`字段中,我们使用`CharField`来定义它是一个字符串类型的字段。`source`参数指定了从哪个属性中获取值,这里我们使用了`author.name`,意思是从`Book`模型的`author`字段中获取`name`属性的值。`read_only`参数指定该字段只读,不可写入。
接下来,我们需要在`Book`模型中增加一个`name`字段,并在`Author`模型中增加`__str__`方法来返回作者的姓名:
```python
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return self.title
```
现在,我们就可以在`Book`模型的API中获取到作者的姓名了。
注意,如果要在`BookSerializer`中写入`author_name`字段,需要在`AuthorSerializer`中定义`name`字段。
阅读全文