в DRF, есть ли способ получить одно вложенное изображение для отображения на виде. В моем примере вы можете видеть, что в списке 2 фотографии. Что было бы лучшим решением для получения и отображения только этой первой фотографии? Этот вид предназначен для списка домов, и я не хочу, чтобы отображались все числа пи c, поскольку некоторые пользователи могут загружать более 30 фотографий.
"url": "http://127.0.0.1:8000/api/v1/listings/1/",
"address": "8753 sherwood dr apt 111",
"image_set": [
{
"photo": "http://127.0.0.1:8000/media/listing_images/front-view.png"
},
{
"photo": "http://127.0.0.1:8000/media/listing_images/image34453.png
}
]
},
class ImageSerializerForListingDetail(serializers.ModelSerializer):
photo = serializers.ImageField(use_url=True, allow_empty_file=True)
class Meta:
model = Image
fields = ('photo', )
def get_image_url(self, listing):
return listing.photo.url
class ListingListSerializer(serializers.HyperlinkedModelSerializer):
photo = ImageSerializerForListingDetail(many=True, required=False)
class Meta:
model = Listing
fields = ('url', 'address', 'photo', )
class ListingViewSet(viewsets.ModelViewSet):
queryset = Listing.objects.all().order_by('id')
permission_classes = [IsOwnerOrReadOnly, ]
serializer_classes = {
'list': ListingListSerializer,
'retrieve': ListingSerializer
}
default_serializer_class = ListingSerializer
def get_serializer_class(self):
return self.serializer_classes.get(self.action, self.default_serializer_class)
def create(self, request, *args, **kwargs):
serializer = ListingSerializer(data=request.data, files=request.FILES)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
текущий код, который у меня есть попытался, возвращает пустой список фотографий .... #
class ImageSerializerForListingDetail(serializers.ModelSerializer):
photo = serializers.ImageField(allow_empty_file=True)
class Meta:
model = Image
fields = ('photo', )
def get_image_url(self, listing):
return listing.photo.url
class ListingListSerializer(serializers.HyperlinkedModelSerializer):
first_image = ImageSerializerForListingDetail(many=True, required=False)
class Meta:
model = Listing
fields = ('url', 'address', 'first_image', )
def get_first_image(self, obj):
first_image = Image.objects.filter(listing=obj).first()
first_image_serializer = ImageSerializerForListingDetail(first_image)
return first_image_serializer.data