Как сделать абсолютный 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)