首页 > 解决方案 > Django REST 模型 Model.objects.create 函数的参数

问题描述

需要知道 Model.objects.create 函数的参数。这个例子来自这个链接:https ://www.django-rest-framework.org/api-guide/relations/#nested-relationships 。在这一行 Track.objects.create(album=album, **track_data)

是什么album=album?我认为专辑的右侧分配值Album.objects.create(**validated_data)是左侧专辑。根据文档,它是 Model 字段。但模特TrackAlbum 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

标签: django-rest-frameworkdjango-serializer

解决方案


教程中没有明确说明,但假设在Track被调用的专辑中有一个 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>

这暗示了我在说什么。如果仅仅是因为缺少该字段,则没有字段album的事实会引发错误。因此,您需要明确地包含它。TrackSerializerTrack.objects.create(**track_data)album


推荐阅读