Как сделать абсолютный url для изображений

модели

class ProductImage(models.Model):
    image = models.ImageField(upload_to="images", null=True, blank=True, 
    verbose_name='Картинка')
    product_id = models.ForeignKey(
        ProductItem,
        related_name="product_image",
        on_delete=models.CASCADE,
        blank=True,
        null=True)

модели

 class Favorite(models.Model):
     user = models.ForeignKey(User, on_delete=models.CASCADE, 
     verbose_name="Пользователь", related_name='favorites', null=True, blank=True)
     products = models.ManyToManyField(ProductItem, verbose_name='Продукты', 
     related_name = 'favorites', null=True, blank=True)

 class Meta:
     verbose_name = "Избранное"
     verbose_name_plural = "Избранные"

serializers

    class ProductItemSerializers(serializers.ModelSerializer):
         product_image = ProductImageSerializers(many=True, read_only=True)
         class Meta:
             model = ProductItem
             fields = (
        "id",
        "title",
        "size",
        "category",
        "product",
        "description",
        "price",
        "equipment",
        "is_new",
        "bouquet_care",
        "specifications",
        "discount",
        "product_image",
    )

просмотров

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserInfoSerializer

    @action(methods=['get'], detail=True)
    def user_favorite(self, request, *args, **kwargs):
        user = self.get_object()
        favorite =  user.favorites.all()
        serializer = FavoriteListSerializer(favorite, many=True)
        return Response(serializer.data)

при вызове функций http://127.0.0.1:8000/api/v1/users/1/user_favorite/ у пользователя в представлении все отображается, но картинка становится не кликабельной без http

                {
                    "id": 11,
                    "image": "/media/images/%D0%91%D0%B5%D0%B7_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_NE6Swo2.jpeg",
                    "product_id": 3
                },
                {
                    "id": 12,
                    "image": "/media/images/%D0%91%D0%B5%D0%B7_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_j5pAcru.jpeg",
                    "product_id": 3
                },
                {
                    "id": 13,
                    "image": "/media/images/%D0%91%D0%B5%D0%B7_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_gx72p5l.jpeg",
                    "product_id": 3
                },

но должно быть

    {
        "id": 11,
        "image": "http://127.0.0.1:8000/media/images/%D0%91%D0%B5%D0%B7_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_NE6Swo2.jpeg",
        "product_id": 3
    },
    {
        "id": 12,
        "image": "http://127.0.0.1:8000/media/images/%D0%91%D0%B5%D0%B7_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_j5pAcru.jpeg",
        "product_id": 3
    },
    {
        "id": 13,
        "image": "http://127.0.0.1:8000/media/images/%D0%91%D0%B5%D0%B7_%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_gx72p5l.jpeg",
        "product_id": 3
    },

как переписать ProductItemSerializer, чтобы сделать абсолютный url, или что вообще нужно сделать для этого

Вам необходимо передать request в контекст сериализатора, чтобы абсолютный URL мог быть определен в соответствии с docs. Например:

@action(methods=['get'], detail=True)
def user_favorite(self, request, *args, **kwargs):
    user = self.get_object()
    favorite =  user.favorites.all()
    context = {'request': request}
    serializer = FavoriteListSerializer(favorite, many=True, context=context)
Вернуться на верх