Могу ли я использовать ПК из другой модели в RetrieveAPIView. Это плохая практика? - PullRequest
2 голосов
/ 21 мая 2019

Я работаю над API RetrieveAPIView, в котором я хочу передать идентификатор колледжа, и он вернет всех студентов, которые там учатся, но я использую Modelserializer модели студента. код в приложении колледжа. У меня неприятности, это плохая практика?

мои urls.py:

from django.urls import path
from student.views import StudentView

path('studentdetails/<int:college_id>/', views.StudentView.as_view())

my serializer.py

from student.models import Student

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ('id', 'name', 'rollno')

my views.py

from rest_framework.generics import RetrieveAPIView
from rest_framework import serializers
from student.serializer import StudentSerializer
from student.models import Student
from .models import College 

class StudentView(RetrieveAPIView):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer

    def get(self, request, *args, **kwargs):
        try:
            college_id=College.objects.get(id=self.kwargs.get('college_id'))
            data=myfunction(id=college_id)
            response_data=self.get_serializer(data, many=True)
            return Response({"data": response_data.data})
         except College.DoesNotExist:
             raise serializers.ValidationError(_("College Does Not exists"))

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Используйте ListAPIView вместо RetrieveAPIView и используйте фильтрацию. Измените метод get_queryset или добавьте собственный фильтр.

https://www.django -rest-framework.org / апи-гид / фильтрация /

0 голосов
/ 21 мая 2019

RetrieveAPIView Используется для конечных точек только для чтения для представления отдельного экземпляра модели.

, поэтому попробуйте для пользователя ListAPIView

Попробуйте это

Предполагая, что у вас есть иностранный ключ колледжа в студент модель

from rest_framework import generics

class StudentView(generics.ListAPIView):

   queryset = Student.objects.all()
   serializer_class = StudentSerializer

   def get(self, request, *args, **kwargs):
        try:
            college_id=College.objects.get(id=self.kwargs.get('college_id'))
            students = self.queryset.filter(college=college_id)
            response_data=self.get_serializer(students, many=True)
            return Response(
               {
                 "data": response_data.data
               }
           )

         except College.DoesNotExist:
             raise serializers.ValidationError(_("College Does Not exists"))

надеюсь, это поможет

...