我目前有一个Base64ImageField,它完全可以正常工作。我遇到的唯一问题是有时返回的路径不完整。它跳过域名,但是路径的其余部分都很好。它跳过域名的原因是因为我在序列化过程中没有传递参数context={"request": request}
。原因是有时我没有访问权限到请求对象。换句话说,这很好
jsonObject = Serializer(model_instance,context={"request": request}).data
这会跳过图片字段中的域名
jsonObject = Serializer(model_instance).data
我的问题是,当我不需要请求对象时,如何使用第二个示例使它返回完整的url路径?还是我可以通过任何方式获取请求对象。什么时候不可用?
我的代码中有这个序列化器
class Serializer_Employer_TX(ModelSerializer):
user = Serializer_User()
employer_image = Base64ImageField(max_length=None, use_url=True, required=False)
class Meta:
model = modelEmployer
fields = [
'user',
'employer_zip',
'employer_image',
]
答案 0 :(得分:1)
您可以使用sites
framework,并覆盖Serializer_Employer_TX
中的to_representation
method
from django.contrib.sites.models import Site
class Serializer_Employer_TX(ModelSerializer):
user = Serializer_User()
employer_image = Base64ImageField(max_length=None, use_url=True, required=False)
class Meta:
model = modelEmployer
fields = [
'user',
'employer_zip',
'employer_image',
]
def to_representation(self, instance):
"""Convert `username` to lowercase."""
ret = super().to_representation(instance)
if not 'request' in self.context:
# You can tweaks the url in here directly
current_site = Site.objects.get_current().domain
ret['employer_image'] = current_site + ret['employer_image']
return ret
我希望这会有所帮助。