Однопользовательское представление в Django API (Rest Framework)
Я создал API
на Django
с помощью rest framework
, я заполняю его через Django Admin Page
по умолчанию.
У меня есть несколько полей в моем API
, вот мой serializers.py
:
class HCSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = HomeController
fields = ('full_name','Staff','CID', 'OI', 'Rating', 'GND', 'TWR', 'APP', 'CTR', 'Notes')
class VCSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = VisitingController
fields = ('full_name','CID', 'OI', 'Rating', 'GND', 'TWR', 'APP', 'CTR', 'Notes')
мой views.py
:
class HCViewSet(APIView):
def get(self):
HC = HomeController.objects.all().order_by('full_name')
serializer = HCSerializer(HC, many=True)
return Response(serializer.data)
class VCViewSet(APIView):
def get(self):
VC = VisitingController.objects.all().order_by('full_name')
serializer = VCSerializer(VC, many=True)
return Response(serializer.data)
мой models.py
:
Мой вопрос: API
работает нормально, и я могу получить все результаты, но я хочу создать endopoint
типа /api/<int:CID>
, который возвращает только одного пользователя. Я хотел бы использовать поле 'CID
' для фильтрации. Как я могу это сделать? Спасибо!
И вам нужно создать детальные представления.
from django.http import Http404
class HCDetailViewSet(APIView):
def get_object(self, CID):
try:
return HomeController.objects.get(CID=CID)
except HomeController.DoesNotExist:
raise Http404
def get(self, request, CID, format=None):
snippet = self.get_object(CID)
serializer = HCSerializer(snippet)
return Response(serializer.data)
class VCDetailViewSet(APIView):
def get_object(self, CID):
try:
return VisitingController.objects.get(CID=CID)
except VisitingController.DoesNotExist:
raise Http404
def get(self, request, CID, format=None):
snippet = self.get_object(CID)
serializer = VCSerializer(snippet)
return Response(serializer.data)
А в urls.py нужно добавить URL для детальных представлений.
path('hc/<str:CID>', HCDetailViewSet.as_view(), name="hc_detail_view")
path('vc/<str:CID>', VCDetailViewSet.as_view(), name="vc_detail_view")