Python Django Rest框架-如何编写多个嵌套字段序列化程序(用于读写)
我正在尝试编写一个“def create”方法来对多个对象执行嵌套序列化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(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