Я думаю, что вы отправляете images
в виде массива из вашего интерфейса.Вы можете отформатировать их немного лучше, чтобы каждый объект массива соответствовал вашей ArticleImage
модели.Например, каждый объект ключа images
должен иметь файл с ключом img
(потому что это имя вашего поля в модели):
<QueryDict:
{'title': ['testTitle'],
'text': ['testText'],
'images': [{'img': <InMemoryUploadedFile: 486217.jpg (image/jpeg)>},
{'img': <InMemoryUploadedFile: 344611.jpg (image/jpeg)>}]
}>
Теперь вы можете использовать ModelSerializer
с many=True
чтобы выполнить работу за вас.
Например, создайте сериализатор для ArticleImage
модели:
class ArticleImageSerializer(serializers.ModelSerializer):
class Meta:
model = ArticleImage
fields = ('article', 'img', 'is_main', 'create_time')
read_only_fields = ('article', 'is_main', 'create_time') # so that only `img` field comes from input
Теперь используйте его для сохранения изображений в вашей модели:
def post(self, request):
print(request.data)
images = request.data.pop('images')
serializer = self.get_serializer_class(data=request.data) # why not use ArticleSerializer?
serializer.is_valid(raise_exception=True) # this lets you validate if something is wrong with user's input
new_article = serializer.save() # similar to Article.objects.create
images_serializer = ArticleImageSerializer(data=images, many=True) # only `img` comes from data
images_serializer.is_valid(raise_exception=True)
images_serializer.save(article=new_article, is_main=False) # adding additional fileds
return Response(serializer.data)
Этот код не проверен, дайте мне знать, если что-то не работает должным образом.Надеюсь, это поможет.