Django 我可以在RetrieveAPIView中使用另一个模型的pk吗。这种做法不好吗?
我正在开发一个RetrieveAPIView api,在这个api中,我希望传递学院id,它将返回当前在那里学习的所有学生,但我使用的是学生模型的Modelserializer。代码在大学应用程序中。我有麻烦了这是个坏习惯吗 my URL.py:Django 我可以在RetrieveAPIView中使用另一个模型的pk吗。这种做法不好吗?,django,python-3.x,django-rest-framework,Django,Python 3.x,Django Rest Framework,我正在开发一个RetrieveAPIView api,在这个api中,我希望传递学院id,它将返回当前在那里学习的所有学生,但我使用的是学生模型的Modelserializer。代码在大学应用程序中。我有麻烦了这是个坏习惯吗 my URL.py: from django.urls import path from student.views import StudentView path('studentdetails/<int:college_id>/', views.Stude
from django.urls import path
from student.views import StudentView
path('studentdetails/<int:college_id>/', views.StudentView.as_view())
我的观点
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"))
RetrieveAppView用于只读端点以表示单个模型实例 因此,请尝试使用用户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"))
希望它有助于检索用于只读端点表示单个模型实例的PiView 因此,请尝试使用用户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"))
希望它能帮助您使用ListAPIView而不是RetrieveAPIView并使用筛选。更改get_queryset方法或添加自己的筛选器
使用ListAPIView而不是RetrieveAPIView并使用筛选。更改get_queryset方法或添加自己的筛选器
RetrieveAppView应该只返回一个结果,否则会引发错误。我建议在您的案例中使用一个过滤器。您可以使用
ListAPIView
。@JPG过滤器在哪里?或者我应该使用ListAPIView吗?RetrieveAPIView
应该只返回一个结果,否则会引发错误。我建议在您的案例中使用一个过滤器。您可以使用ListAPIView
。@JPG过滤器在哪里?还是应该使用ListAPIView?