【发布时间】:2022-02-06 22:19:16
【问题描述】:
我正在尝试将 DRF 的 ListSerializer 与外键模型结合起来。目的是拥有类似于 Django 的 admin-inline Formula 的东西。不幸的是,我在文档或 SO 示例中找不到完整示例:两个模型、两个序列化程序和一个视图集。
假设我们有一个类似 SO 示例 DRF ListSerializer and ListField 的模型:
class Musician(models.Model):
name = models.CharField(max_length=50)
comment = models.TextField(blank=True)
class Album(models.Model):
artist = models.ForeignKey(Musician, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
所以我尝试将它们放入这样的序列化程序中:
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
fields = 'artist', 'title'
model = Album
class MusicianSerializer(serializers.ModelSerializer):
class Meta:
fields = 'name', 'comment', 'albums'
model = Musician
albums = serializers.ListSerializer(child=AlbumSerializer(), source='album_set')
然后我想在其上构建一个 ModelViewSet,以便我可以使用它,就像在 Django-Admin-Inline 中一样。但这不是那样工作的:
class MusicianViewSet(viewsets.ModelViewSet):
queryset = Musician.objects.all()
serializer_class = MusicianSerializer
但是很难测试,HTML 前端确实可以工作,并且在测试中我(在稍微不同的情况下)收到类似以下的错误消息:
{'album_set': [ErrorDetail(string='This field is required.', code='required')]}
我无法理解,即使在源代码中挖掘了几个小时之后。 那么我错过了什么?理想情况下,什么是 POST、PUT 和 DESTROY 的完整工作示例,在子模型对象上创建修改或删除?
[编辑:我正在使用 Django==4.0.1 和 django-extensions==3.1.5]
【问题讨论】:
标签: django django-rest-framework