Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架-如何编写多个嵌套字段序列化程序(用于读写)_Python_Django_Django Rest Framework_Django Serializer - Fatal编程技术网

Python Django Rest框架-如何编写多个嵌套字段序列化程序(用于读写)

Python Django Rest框架-如何编写多个嵌套字段序列化程序(用于读写),python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我正在尝试编写一个“def create”方法来对多个对象执行嵌套序列化 def create(self, validated_data): suggested_songs_data = validated_data.pop('suggested_songs') suggest_song_list = list() for song_data in suggested_songs_data: song = Song.

我正在尝试编写一个“def create”方法来对多个对象执行嵌套序列化

    def create(self, validated_data):
        suggested_songs_data = validated_data.pop('suggested_songs')
        suggest_song_list = list()
        for song_data in suggested_songs_data:
            song = Song.objects.create(**song_data)
            suggest_song_list.append(song)          
        message = Messages.objects.create(suggested_songs=suggest_song_list, **validated_data)
        return message
这是我的模式:

class MessagesSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.IntegerField(source='pk', read_only=True)
    suggested_songs = SongSerializer(many=True)

    class Meta:
        model = Messages
        fields = ('id','owner','url','suggested_songs',)
        #fields = ('id','url','suggested_songs',)

class SongSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Song
        fields =('id','title','artist','album','albumId','num_votes','cleared')
        read_only_fields = ('song_id')
但我得到了这个错误

Cannot assign "[<Song: Song object>, <Song: Song object>]":     "Messages.suggested_songs" must be a "Song" instance.

如果没有已创建的对象,则无法创建多个关系。必须首先创建对象,然后建立关系。 比如:

def create(self, validated_data):
    suggested_songs_data = validated_data.pop('suggested_songs')
    message = Messages.objects.create(**validated_data)
    for song_data in suggested_songs_data:
        song = Song.objects.create(**song_data)
        message.suggested_songs.add(song)
    return message

听起来您的
消息
模型有一个
建议歌曲
字段,它是一个
外键
,而不是一个
多个
。啊,是的。我将用模型更新问题。“Suggestived_songs”是一个无效的关键字参数,在尝试发布数据后,此函数现在显示。您还有其他建议吗?我讨厌窃听,但我有点被困在这里。是的,我要得到这个解决方案,谢谢你,它的工作非常完美。根据我的要求。。。非常感谢您的支持。@educolo
def create(self, validated_data):
    suggested_songs_data = validated_data.pop('suggested_songs')
    message = Messages.objects.create(**validated_data)
    for song_data in suggested_songs_data:
        song = Song.objects.create(**song_data)
        message.suggested_songs.add(song)
    return message