需要了解Model.objects.create函数的参数。此示例来自此链接:https://www.django-rest-framework.org/api-guide/relations/#nested-关系。在这一行中Track.objects.create(相册=相册,**Track_data(
什么是album=album
?我认为专辑右边的赋值是Album.objects.create(**validated_data)
,但左边的专辑是什么。根据文档,它是"模型"字段。但模型Track
和模型Album contains field
都没有专辑`。
这是Album
的默认型号名称吗?
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
教程中没有明确说明,但假设Track
中有一个名为album的ForeignKey字段,它引用了Album
模型。
注意示例部分的第二个代码片段中的以下内容:
>>> album = Album.objects.create(album_name="The Grey Album", artist='Danger Mouse')
>>> Track.objects.create(album=album, order=1, title='Public Service Announcement', duration=245)
<Track: Track object>
这暗示了我的意思。如果只是Track.objects.create(**track_data)
,则TrackSerializer
上没有字段album
这一事实将引发错误,因为字段album
将丢失。因此,您需要明确地包含它。