django - 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,)
解决方案
depth参数应该为您提供整个作者对象。
默认的 ModelSerializer 使用主键来表示关系,但您也可以使用 depth 选项轻松生成嵌套表示
depth 选项应设置为一个整数值,该值指示在恢复为平面表示之前应遍历的关系深度。
class BookSerializer(serializers.ModelSerializer):
author = AuthorSerializer()
class Meta:
model = Book
depth = 1
fields = ('id', 'name', 'author')
推荐阅读
- asp.net - 如何使用 Bootstrap 将网格系统应用于 contentplaceholder?
- javascript - Angular 5 侧边导航
- java - 正则表达式查找 $$ 符号之间的单词
- opencl - 任意质数工作项的工作维度
- .net - 将 ATL COM 项目转换为 .NET
- c++ - 定义多次继承的虚方法
- python - 如何检查两个封闭标签 XML 之间的文本是否存在于 minidom-
- javascript - javascript .map(x => x && y); 为什么结果 y
- ofbiz - JAR - 从 derby 到 mysql
- python - Scrapy 选择器上的 extract_first() 和 extract() 方法没有返回相同的值