Python Django Restul返回绝对URL';s

Python Django Restul返回绝对URL';s,python,django,rest,django-rest-framework,Python,Django,Rest,Django Rest Framework,所以我在serializers.py中有一个相当直接的序列化程序 class ScheduleSerializer(serializers.ModelSerializer): class Meta: model = FrozenSchedule fields = ['startDate', 'endDate', 'client', 'url'] startDate = serializers.DateField(source='start_da

所以我在
serializers.py中有一个相当直接的序列化程序

class ScheduleSerializer(serializers.ModelSerializer):

    class Meta:
        model = FrozenSchedule
        fields = ['startDate', 'endDate', 'client', 'url']

    startDate = serializers.DateField(source='start_date')
    endDate = serializers.DateField(source='end_date')
    client = serializers.StringRelatedField(many=False)
    url = serializers.URLField(source='get_absolute_url')
def get_absolute_url(self):
    return reverse('reports:frozenschedule-detail', kwargs={
        'slug': self.client.slug, 'pk': self.id
    })
class ScheduleViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = FrozenSchedule.objects.not_abandoned().future()\
        .filter(signed=False).order_by('start_date')
    serializer_class = serializers.ScheduleSerializer
在my
models.py中获取绝对url

class ScheduleSerializer(serializers.ModelSerializer):

    class Meta:
        model = FrozenSchedule
        fields = ['startDate', 'endDate', 'client', 'url']

    startDate = serializers.DateField(source='start_date')
    endDate = serializers.DateField(source='end_date')
    client = serializers.StringRelatedField(many=False)
    url = serializers.URLField(source='get_absolute_url')
def get_absolute_url(self):
    return reverse('reports:frozenschedule-detail', kwargs={
        'slug': self.client.slug, 'pk': self.id
    })
class ScheduleViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = FrozenSchedule.objects.not_abandoned().future()\
        .filter(signed=False).order_by('start_date')
    serializer_class = serializers.ScheduleSerializer
viewsets.py

class ScheduleSerializer(serializers.ModelSerializer):

    class Meta:
        model = FrozenSchedule
        fields = ['startDate', 'endDate', 'client', 'url']

    startDate = serializers.DateField(source='start_date')
    endDate = serializers.DateField(source='end_date')
    client = serializers.StringRelatedField(many=False)
    url = serializers.URLField(source='get_absolute_url')
def get_absolute_url(self):
    return reverse('reports:frozenschedule-detail', kwargs={
        'slug': self.client.slug, 'pk': self.id
    })
class ScheduleViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = FrozenSchedule.objects.not_abandoned().future()\
        .filter(signed=False).order_by('start_date')
    serializer_class = serializers.ScheduleSerializer
它返回JSON,如下所示:

 [
    {
        "startDate": "2016-10-01",
        "endDate": null,
        "client": "Abscissa.Com Limited",
        "url": "/clients/abscissac/frozenschedule/1",
    }
]
但我希望它返回完整的URL,而不仅仅是相对路径

[
    {
        "startDate": "2016-10-01",
        "endDate": null,
        "client": "Abscissa.Com Limited",
        "url": "http://localhost:8000/clients/abscissac/frozenschedule/1",
    }
]
我可以在序列化程序中以这种方式序列化URL吗

Restful文档声明rest_框架
reverse
函数正是我所需要的。但是它需要请求对象来构建UR

覆盖
HyperlinkedEntityField

class UrlHyperlinkedIdentityField(HyperlinkedIdentityField):
   def get_url(self, obj, view_name, request, format):
     if obj.pk is None:
       return None

    return self.reverse(view_name,
        kwargs={
            'slug': obj.client.slug,
            'pk': obj.id,
        },
        request=request,
        format=format,
    )
然后在
serializers.py中:

url = UrlHyperlinkedIdentityField(view_name='reports:frozenschedule-detail')

覆盖HyperlinkedEntityField

class UrlHyperlinkedIdentityField(HyperlinkedIdentityField):
   def get_url(self, obj, view_name, request, format):
     if obj.pk is None:
       return None

    return self.reverse(view_name,
        kwargs={
            'slug': obj.client.slug,
            'pk': obj.id,
        },
        request=request,
        format=format,
    )
然后在
serializers.py中:

url = UrlHyperlinkedIdentityField(view_name='reports:frozenschedule-detail')

向我们展示您从模型获取绝对url的方法您可以尝试使用
HyperlinkedEntityField
?我想我需要指定我的视图名称,如
url=serializers.HyperlinkedEntityField(视图\u name='reports:frozenschedule detail',查找\u字段={pk:…})
但是我如何指定查找字段?向我们展示您从模型获取绝对url的方法您可以尝试使用
HyperlinkedEntityField
吗?我想我需要指定我的视图名称,如
url=serializers.HyperlinkedEntityField(查看\u name='reports:frozenschedule detail',查找\u字段={pk:…})
但如何指定查找字段?