У меня есть такая модель:
class Listing(...):
...
class ListingImage(...):
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name='images')
...
и поле сериализатора для отображения изображений:
class ListingImageSerializer(serializers.ModelSerializer):
class Meta:
model = ListingImage
fields = ('id', ..., 'listing')
...
Мои URL-маршруты настроены следующим образом:
POST /v1/listings/:listing_id/images
в представлении, я получаю список на основе параметра пути:
def upload_photo_to_listing(request, listing_id):
listing = Listing.objects.get(pk=listing_id)
data = request.data.copy()
data['listing'] = listing
serializer = ListingImageSerializer(
data=data, context={'request': request})
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response({'data': serializer.data}, status.HTTP_201_CREATED)
Это работает нормально (для простоты удалена обработка ошибок);тем не менее, я не люблю мутировать request.data (или копировать и изменять его).При использовании оригинального объекта я могу сделать что-то вроде этого:
ListingImageSerializer(someListingImageObject, data=data, ...)
Можно ли сделать что-то похожее на него, но вместо оригинальных объектов фактически передать соответствующее поле?