在Django Rest Framework中通过url访问序列化程序字段

时间:2014-06-18 16:53:14

标签: django django-rest-framework

设置

我有一个标准设置,其中包含模型Account和相应的AccountSerializer

serializers.py:

class AccountSerializer(serializers.ModelSerializer):
    class Meta:
        model = Account
        fields = ('id', 'account_name', 'users', 'created')

views.py:

class SingleAccountView(generics.RetrieveAPIView):
    serializer_class = AccountSerializer
    queryset = Account.objects.all()
    lookup_field = 'id'
    permission_classes = ()

urls.py:

url(r'^account/(?P<id>\w+)$', SingleAccountView.as_view())

目标

我希望能够通过url访问我的序列化程序的属性,而无需将其硬编码到urls.py。例如,我希望能够转到website.com/account/23/account_name获取帐户23的帐户名称。我怎样才能实现这一目标?

1 个答案:

答案 0 :(得分:2)

您需要明确地编写一个视图来执行此操作,因为没有一个通用视图涵盖该用例。

沿着这些方向的东西是正确的......

class SingleAccountPropertyView(generics.GenericAPIView):
    lookup_field = 'id'

    def get(self, request, id, property_name):
        instance = self.get_object()
        if not hasattr(instance, property_name):
            return Response({'errors': 'no such property'}, status.HTTP_404_NOT_FOUND)
        return Response({'property': getattr(instance, property_name)}

您也可以使用常规APIView代替GenericAPIView,在这种情况下,您需要显式编写实例查找,而不是使用通用get_object() / {{ 1}} lookup_field提供的功能。