首页 > 解决方案 > Django Rest Framework:如何使用相关名称填充 ForiegnKey 字段?

问题描述

我有两个模型,一个是 BookModel,另一个是 AuthorModel。我基本上想为 BookModel 创建一个外键字段,以便将其引用到 AuthorModel。我已经能够成功地建立这一点。

但是当我检索 BookModel 的对象/记录时,我得到的是作者 ID,而不是整个作者对象。我怎么做?

这是我在 models.py 中的代码:

class AuthorModel(models.Model):
     id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
     name = models.CharField('Name', max_length=255)
     pen_name = models.CharField('Pen Name', max_length=255)

class BookModel(models.Model):
     id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
     name = models.CharField('Book Name', max_length=255)
     author = models.ForeignKey(Author, on_delete=models.CASCADE, blank=True, default='', related_name='book_authorid')

在 serializers.py 中:

class AuthorSerializer(serializers.ModelSerializer):
   class Meta:   
        model = Author
        fields = ('id', 'name', 'pen_name')


class BookSerializer(serializers.ModelSerializer):
   author = AuthorSerializer() 
   class Meta:
        model = Book
        fields = ('id', 'name', 'author')

风景:

class BookViewSet(mixins.RetrieveModelMixin,
                       mixins.UpdateModelMixin,
                       mixins.DestroyModelMixin,
                       viewsets.GenericViewSet):
queryset = BookModel.objects.all()
serializer_class = BookSerializer
permission_classes = (AllowAny,)

标签: djangodjango-modelsdjango-rest-framework

解决方案


depth参数应该为您提供整个作者对象。

默认的 ModelSerializer 使用主键来表示关系,但您也可以使用 depth 选项轻松生成嵌套表示

depth 选项应设置为一个整数值,该值指示在恢复为平面表示之前应遍历的关系深度。

class BookSerializer(serializers.ModelSerializer):
   author = AuthorSerializer() 
   class Meta:
        model = Book
        depth = 1
        fields = ('id', 'name', 'author')

推荐阅读