drf外键序列化

发布时间 2023-06-09 00:08:30作者: 腐汝

在Django REST Framework(DRF)中,外键字段可以通过序列化器进行序列化和反序列化。

 1、模型感受一下:
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=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

 

2、在上面的示例中,Book模型有一个外键字段指向Author模型。在BookSerializer中,我们可以使用source参数来指定外键字段对应的关联模型中的字段。例如,在这个例子中,我们使用source='author.name'将作者名字的字段映射到author_name字段。

在AuthorSerializer中,我们包含了一个嵌套的BookSerializer,以便序列化与该作者相关联的所有书籍。

from rest_framework import serializers
from myapp.models import Author, Book

class BookSerializer(serializers.ModelSerializer):
    author_name = serializers.CharField(source='author.name')

    class Meta:
        model = Book
        fields = ['id', 'title', 'author_name']

class AuthorSerializer(serializers.ModelSerializer):
    books = BookSerializer(many=True)

    class Meta:
        model = Author
        fields = ['id', 'name', 'books']