0
モデルの多対多フィールドに投稿しようとしています。DjangoRestFrameworkでネストされたデータを投稿する
以下のコードはPOSTS(200 OK応答を返しますが、データ( "text")は決して投稿されません)。
私はPDBトレースを使用しましたが、info_data
には正しいデータが含まれています。
FY validate_data
がPKフィールドをストライピングしていたため、self.initial
というデータを使用しなければなりませんでした。
Models.py:
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)
シリアライザ:
{"info":[{"text":"Test POST", "pk":2}]}
:
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
Views.py
class EditorViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = EditorSerializer
私はこのようなルックスを掲示していたデータ
私はMOVIEモデルのPKを、それを掲示しています:
example.com/api/Editor/123