当嵌套序列化程序中有另一个模型(manytomany)时,如何在 django 模型上发布,我想同时创建两者
Posted
技术标签:
【中文标题】当嵌套序列化程序中有另一个模型(manytomany)时,如何在 django 模型上发布,我想同时创建两者【英文标题】:How do I post on a django model when it has another model (manytomany ) inside nested serializers, I want at the same time to create both 【发布时间】:2021-12-27 17:26:09 【问题描述】:我的模型是:
-
期间
班级学生主题
Period 与 ClassStudentSubject 有多对多关系
当我发布一个句点时,我不想选择使用哪个现有 ClassStudentSubject 对象,我想与句点一起创建一个新对象。
ClassStudentSubject - 我创建这个模型是为了将一些周期数据构造成一个对象
【问题讨论】:
【参考方案1】:这可以通过重写序列化程序的 create 方法来实现。您必须先创建“ClassStudentSubject”对象,然后在“create”方法中创建 Period 对象时使用该对象。 以下是符合您要求的文档中的示例。
class TrackSerializer(serializers.ModelSerializer):
class Meta:
model = Track
fields = ['order', 'title', 'duration']
class AlbumSerializer(serializers.ModelSerializer):
tracks = TrackSerializer(many=True)
class Meta:
model = Album
fields = ['album_name', 'artist', 'tracks']
def create(self, validated_data):
tracks_data = validated_data.pop('tracks')
album = Album.objects.create(**validated_data)
for track_data in tracks_data:
Track.objects.create(album=album, **track_data)
return album
【讨论】:
这解决了我的问题。我可以从专辑与曲目一起发布,但我无法在具有多对多关系的字段上发布。就像在 Tracks 的情况下,如果订单是与另一个对象的多对多关系,我可以从 Tracks 发布带有订单 id 数组的帖子,但如果我从专辑中发布它会告诉我: ield 'id' 期望一个数字但是got [以上是关于当嵌套序列化程序中有另一个模型(manytomany)时,如何在 django 模型上发布,我想同时创建两者的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest Framework 中的嵌套序列化程序“通过模型”
嵌套关系序列化程序中的 Django Rest Framework 模型 Id 字段