我有一个标准设置,其中包含模型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的帐户名称。我怎样才能实现这一目标?
答案 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
提供的功能。