在 django REST API 中删除图像 link 的主机名
remove hostname of image link in django REST API
我有一个 model
如下所示:
# models.py
# ================================================
def get_category_image_name(instance, filename):
fn = os.path.join('img/thumbnailCategory/ct', str(instance.id) + '.png')
return fn
def get_food_t_image_name(instance, filename):
fn = os.path.join('img/imgFood/ft', str(instance.id) + '.png')
return fn
def get_food_d_image_name(instance, filename):
fn = os.path.join('img/DDD_Food/fd', str(instance.id) + '.png')
return fn
def id_generator(size=10, chars='123456789'):
return ''.join(random.choice(chars) for _ in range(size))
class Category(models.Model):
id = models.IntegerField(primary_key=True, unique=True, default=id_generator, editable=False)
title = models.CharField(max_length=50, null=False, blank=False)
c_thumbnail = models.ImageField(upload_to=get_category_image_name, null=False, blank=False)
def save(self, *args, **kwargs):
self.id = id_generator()
super(Category, self).save(*args, **kwargs)
def __str__(self):
return '%s | %s' % (self.title, self.id)
class Food(models.Model):
food_id = models.IntegerField(primary_key=True, unique=True, default=id_generator, editable=False)
name = models.CharField(max_length=30, null=False, blank=False)
desc = models.TextField(max_length=200)
category_id = models.ForeignKey(Category, on_delete=models.CASCADE)
price = models.IntegerField(null=False, blank=False)
f_thumbnail = models.ImageField(upload_to=get_food_t_image_name)
DDD_data = models.ImageField(upload_to=get_food_d_image_name)
availability = models.BooleanField(default=True)
discount = models.IntegerField(default=0)
def save(self, *args, **kwargs):
self.id = id_generator()
super(Food, self).save(*args, **kwargs)
def __str__(self):
return '%s %s %s' % (self.name, self.category_id, self.price)
我写了一个食品过滤器,可以按类别过滤食品。
我的 views.py
是这样的:
class GetListOfFoodsByCategory(viewsets.ModelViewSet):
queryset = Food.objects.all()
serializer_class = FoodSerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('category_id',)
我的 urls.py
有:
router = routers.SimpleRouter()
router.register(r'food', views.GetListOfFoodsByCategory)
urlpatterns += router.urls
我的序列化程序就像:
class FoodSerializer(serializers.ModelSerializer):
class Meta:
model = Food
fields = '__all__'
我的问题是:
当我 运行 项目并看到食物图像的链接时,它会向我显示 hostname/directory 图像。我想从中删除主机名。如下所示:
如何删除它?
感谢您的帮助。
您可以使用 SerializerMethodField
覆盖图像字段:
class FoodSerializer(serializers.ModelSerializer):
f_thumbnail = serializers.SerializerMethodField()
DDD_data = serializers.SerializerMethodField()
class Meta:
model = Food
fields = '__all__'
def get_f_thumbnail(self, obj):
if obj.f_thumbnail:
return obj.f_thumbnail.url
def get_DDD_data(self, obj):
if obj.DDD_data:
return obj.DDD_data.url
我有一个 model
如下所示:
# models.py
# ================================================
def get_category_image_name(instance, filename):
fn = os.path.join('img/thumbnailCategory/ct', str(instance.id) + '.png')
return fn
def get_food_t_image_name(instance, filename):
fn = os.path.join('img/imgFood/ft', str(instance.id) + '.png')
return fn
def get_food_d_image_name(instance, filename):
fn = os.path.join('img/DDD_Food/fd', str(instance.id) + '.png')
return fn
def id_generator(size=10, chars='123456789'):
return ''.join(random.choice(chars) for _ in range(size))
class Category(models.Model):
id = models.IntegerField(primary_key=True, unique=True, default=id_generator, editable=False)
title = models.CharField(max_length=50, null=False, blank=False)
c_thumbnail = models.ImageField(upload_to=get_category_image_name, null=False, blank=False)
def save(self, *args, **kwargs):
self.id = id_generator()
super(Category, self).save(*args, **kwargs)
def __str__(self):
return '%s | %s' % (self.title, self.id)
class Food(models.Model):
food_id = models.IntegerField(primary_key=True, unique=True, default=id_generator, editable=False)
name = models.CharField(max_length=30, null=False, blank=False)
desc = models.TextField(max_length=200)
category_id = models.ForeignKey(Category, on_delete=models.CASCADE)
price = models.IntegerField(null=False, blank=False)
f_thumbnail = models.ImageField(upload_to=get_food_t_image_name)
DDD_data = models.ImageField(upload_to=get_food_d_image_name)
availability = models.BooleanField(default=True)
discount = models.IntegerField(default=0)
def save(self, *args, **kwargs):
self.id = id_generator()
super(Food, self).save(*args, **kwargs)
def __str__(self):
return '%s %s %s' % (self.name, self.category_id, self.price)
我写了一个食品过滤器,可以按类别过滤食品。
我的 views.py
是这样的:
class GetListOfFoodsByCategory(viewsets.ModelViewSet):
queryset = Food.objects.all()
serializer_class = FoodSerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('category_id',)
我的 urls.py
有:
router = routers.SimpleRouter()
router.register(r'food', views.GetListOfFoodsByCategory)
urlpatterns += router.urls
我的序列化程序就像:
class FoodSerializer(serializers.ModelSerializer):
class Meta:
model = Food
fields = '__all__'
我的问题是:
当我 运行 项目并看到食物图像的链接时,它会向我显示 hostname/directory 图像。我想从中删除主机名。如下所示:
如何删除它?
感谢您的帮助。
您可以使用 SerializerMethodField
覆盖图像字段:
class FoodSerializer(serializers.ModelSerializer):
f_thumbnail = serializers.SerializerMethodField()
DDD_data = serializers.SerializerMethodField()
class Meta:
model = Food
fields = '__all__'
def get_f_thumbnail(self, obj):
if obj.f_thumbnail:
return obj.f_thumbnail.url
def get_DDD_data(self, obj):
if obj.DDD_data:
return obj.DDD_data.url