New*_*wtt 10 python django django-rest-framework
我正在使用Django Rest Framework并具有以下模型:
class Picture(models.Model):
some_field = models.ForeignKey(some_model)
image = models.ImageField()
Run Code Online (Sandbox Code Playgroud)
我想写一个返回图像url的GET端点.这就是我到目前为止所做的
def get(self, request, aid):
'''
Get Image
'''
try:
picture = Picture.objects.filter(some_field=aid)
except Picture.DoesNotExist:
raise Http404
serialiser = PictureSerialiser(picture)
return Response(serialiser.data)
Run Code Online (Sandbox Code Playgroud)
和我的Serialiser如下:
class PictureSerialiser(serializers.ModelSerializer):
class Meta:
model = Picture
fields = ('field', 'image')
Run Code Online (Sandbox Code Playgroud)
我如何确保回复{field:'Value here', image:'url to image'}?
Hai*_*ris 15
您可以使用自定义序列化方法执行此操作,如下所示:
class PictureSerialiser(serializers.ModelSerializer):
image_url = serializers.SerializerMethodField('get_image_url')
class Meta:
model = Picture
fields = ('field', 'image', 'image_url')
def get_image_url(self, obj):
return obj.image.url
Run Code Online (Sandbox Code Playgroud)
更新序列化程序中的图像字段use_url=True为我工作:
class PictureSerialiser(serializers.ModelSerializer):
image = serializers.ImageField(
max_length=None, use_url=True
)
class Meta:
model = Picture
fields = ('field', 'image')
Run Code Online (Sandbox Code Playgroud)
我无法获得当前接受的答案(向序列化程序添加自定义 get_image_url 方法)以在 Django 2.2 中工作。我收到错误消息,需要更新我的模型以包含字段 image_url。即使在更新模型后它也不起作用。
提供的答案都是正确的,但我想在答案中添加一点,这是一种返回文件路径(包括站点地址)的方法。为此,我们从请求本身获得帮助:
class PictureSerialiser(serializers.ModelSerializer):
image_url = serializers.SerializerMethodField('get_image_url')
class Meta:
model = Picture
fields = ('field',
'image',
'image_url')
def get_image_url(self, obj):
request = self.context.get("request")
return request.build_absolute_uri(obj.image.url)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7306 次 |
| 最近记录: |