我试图在模型上发布多个到多个字段。
以下代码POSTS(提供200 OK响应),但数据(" text")永远不会发布。
我使用了PDB跟踪,而1 occurs 1 time
3 occurs 4 times
确实包含了正确的数据。
仅供参考我不得不使用info_data
数据,因为self.initial
正在剥夺PK字段。
Models.py:
validate_data
串行:
class Info(models.Model):
text = models.CharField("HTML/Text String", max_length=50000, blank=True)
file = models.FileField(upload_to='uploads/', blank=True)
class Movie(models.Model):
info = models.ManyToManyField('Info', blank=True)
Views.py
class InfoSerializer(serializers.ModelSerializer):
class Meta:
model = Info
fields = ('text', 'pk')
class EditorSerializer(serializers.ModelSerializer):
info = InfoSerializer(many=True, read_only=False)
class Meta:
model = Movie
fields = ('info',)
def update(self, instance, initial_data):
infos_data = self.initial_data.pop('info')
for info_data in infos_data:
info_qs = Info.objects.filter(pk=info_data['pk'])
if info_qs.exists():
info = info_qs.first()
else:
info = Info.objects.create(**info_data)
instance.info.add(info)
# import pdb; pdb.set_trace()
return instance
我发布的数据如下所示:
class EditorViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = EditorSerializer
我发布了MOVIE模型的PK:
{"info":[{"text":"Test POST", "pk":2}]}
答案 0 :(得分:0)
所以我需要在信息序列化器中导入PK以保存self.initial
工作。
我基本上首先必须验证数据,我将其作为infos_data
确定。
然后我必须检查Info类的PK,以便我可以更新它。我调用了我的内容(文本)然后保存了它。
class InfoSerializer(serializers.ModelSerializer):
pk = serializers.IntegerField(read_only=False, required=False)
class Meta:
model = Info
fields = ('text', 'pk')
class EditorSerializer(serializers.ModelSerializer):
info = InfoSerializer(many=True, read_only=False)
class Meta:
model = Movie
fields = ('info',)
def update(self, instance, validated_data):
infos_data = validated_data.pop('info')
for info_data in infos_data:
info = Info.objects.get(pk=info_data['pk'])
info.text = info_data['text']
info.save()