次のコードで1つの画像をアップロードできます。複数の画像を選択すると、選択した画像の最後の画像のみがアップロードされます。
models.py
class Image(models.Model):
property_id = models.ForeignKey(
'properties.Address',
null=False,
default=1,
on_delete=models.CASCADE
)
image = models.ImageField(upload_to=directory_path)
serializers.py
class ImageSerializer(serializers.ModelSerializer):
class Meta:
model = Image
fields = (
'property_id',
'image'
)
views.py
class ImageView(APIView):
parser_classes = (MultiPartParser, FormParser)
def get(self, request):
all_images = Image.objects.all()
serializer = ImageSerializer(all_images, many=True)
return JsonResponse(serializer.data, safe=False)
def post(self, request, *args, **kwargs):
file_serializer = ImageSerializer(data=request.data)
if file_serializer.is_valid():
file_serializer.save()
return Response(file_serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
私はDjangoに少し慣れていません。 request.dataで受信した画像の配列をループしたいのですが、その方法を教えてもらえますか?
解決策はListCreateAPIView
を使用する必要があります。独自のビューを実装してすべてを処理する必要はありません。
class ImageView(generics.ListCreateAPIView):
parser_classes = (MultiPartParser, FormParser)
queryset = Image.objects.all()
serializer_class = ImageSerializer
def get_serializer(self, *args, **kwargs):
if isinstance(kwargs.get('data', {}), list):
kwargs['many'] = True
return super(CreateListModelMixin, self).get_serializer(*args, **kwargs)