Несколько конечных точек для одной модели в среде REST - PullRequest
0 голосов
/ 05 октября 2018

У меня есть приложение REST Framework для многостраничной формы:

class InformationRequest(models.Model):
  # user information
  first_name = models.CharField(max_length=60)
  last_name = models.CharField(max_length=60)
  # contact details
  phone = models.CharField(max_length=60)
  email = models.CharField(max_length=60)

Я пытаюсь создать конечные точки для каждого из двух блоков данных в модели:

UserInformationSerializer(serializers.Serializer):
  first_name = serializers.CharField(max_length=60)
  last_name = serializers.CharField(max_length=60)

ContactDetailsSerializer(serializers.Serializer):
  phone = serializers.CharField(max_length=60)
  email = serializers.CharField(max_length=60)

Я бы хотел, чтобы конечные точки выглядели так:

requests/1/user-informtion
requests/1/contact-details

Но я не уверен, как структурировать представление для достижения этой цели.В настоящее время я использую набор моделей:

class InformationRequestViewSet(viewsets.ModelViewSet):
    queryset = InformationRequest.objects.all()
    serializer_class = ??

Возможно ли иметь два сериализатора для одной модели?

1 Ответ

0 голосов
/ 05 октября 2018

Конечно, возможно иметь 2 (или любое количество) сериализатора для модели.И вы на правильном пути.То, что вы хотите, - это отображение разных URL на разные виды.Так что в вашем случае это может быть что-то вроде следующего:

Обратите внимание, что я превратил каждый из ваших сериализаторов в ModelSerializer.

path-to / serializer.py

class UserInformationSerializer(serializers.ModelSerializer):
    class Meta:
        model = InformationRequest
        fields = ('first_name', 'last_name')

class ContactDetailsSerializer(serializers.ModelSerializer):
    class Meta:
        model = InformationRequest
        fields = ('phone', 'email')

Далее у нас есть 2 разных URL, которые указывают на 2 разных представления:

path-to / urls.py

urlpatterns = [
    url(r'^requests/(?P<pk>\d+)/user-information/$', views.UserInformationDetail.as_view()),
    url(r'^requests/(?P<pk>\d+)/contact-details/$', views.ContactInformationDetail.as_view()),
# ... other urls
]

И, наконец,сами виды (для удобства я использую RetrieveAPIView)

path-to / views.py

class UserInformationDetail(generics.RetrieveAPIView):
    queryset = InformationRequest.objects.all()
    serializer_class = UserInformationSerializer

class ContactInformationDetail(generics.RetrieveAPIView):
    queryset = InformationRequest.objects.all()
    serializer_class = ContactDetailsSerializer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...