我已经定义了一个简单的Django应用程序,其中包括以下模型:
class Project(models.Model):
name = models.CharField(max_length=200)
thumbnail = models.FileField(upload_to='media', null=True)
从技术上讲,那可能是一个ImageField。
在模板中,将MEDIA_URL值(在settings.py中正确编码)作为缩略图URL的前缀包含进去很容易。以下方式可以正常工作:
<div id="thumbnail"><img src="{{ MEDIA_URL }}{{ current_project.thumbnail }}" alt="thumbnail" width="400" height="300" border="0" /></div>
我使用DRF定义了一个 HyperlinkedModelSerializer 的子类,名为 ProjectSerializer:
class ProjectSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Project
fields = ( 'id' ,'url', 'name', 'thumbnail')
我定义了一个非常简单的ModelViewSet后代:
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.all()
serializer_class = ProjectSerializer
转换后的JSON样本如下:
{
"id": 1,
"url": "http://localhost:8000/api/v1/projects/1/",
"name": "Institutional",
"thumbnail": "media/institutional_thumb_1.jpg"
}
我还没有找到方法在我的项目JSON表示中提供包含图像完整URL的缩略图字段。
我认为我需要在ProjectSerializer中创建自定义字段,但尚未成功。
SerializerMethodField
是只读的。 - Tom Manterfieldcontext={'request': request}
就足以获得绝对 URL,无需使用SerializerMethodField
。 - Serranoobj.thumbnail.url
,而不是self.thumbnail_url
吗? - T.Coutlakiscontext={'request': request}
作为序列化器参数时,如果从另一个域访问文件字段,则会返回绝对URL。 - Juan García