Django rest框架:如何在一个视图中序列化两个或多个序列化程序?
首先,我想说我是django rest框架的新手。我已经阅读了文档的一些部分,但我不明白如何才能实现我想要的。我会在这里解释的,我真的很感谢你的帮助 在my views.py中,我使用APICursoView(APIView)(如果这不是我想要的解决方案,请告诉我),来序列化一个模型,但我需要序列化3或4个以上的模型,具体取决于Api规范。此视图有两个post请求,但是,如何在一个视图中发送多个post请求?因为,按照我的方式,我的api只显示一个序列化程序来执行post请求 这是我的型号。py:Django rest框架:如何在一个视图中序列化两个或多个序列化程序?,django,django-models,django-rest-framework,django-views,django-serializer,Django,Django Models,Django Rest Framework,Django Views,Django Serializer,首先,我想说我是django rest框架的新手。我已经阅读了文档的一些部分,但我不明白如何才能实现我想要的。我会在这里解释的,我真的很感谢你的帮助 在my views.py中,我使用APICursoView(APIView)(如果这不是我想要的解决方案,请告诉我),来序列化一个模型,但我需要序列化3或4个以上的模型,具体取决于Api规范。此视图有两个post请求,但是,如何在一个视图中发送多个post请求?因为,按照我的方式,我的api只显示一个序列化程序来执行post请求 这是我的型号。py
class AcademicUnity(models.Model):
id_unity = models.AutoField(primary_key=True, help_text='help text goes here')
name_unity = models.CharField(max_length=100, null=True, help_text='help text goes here')
sigla = models.CharField(max_length=100, null=True, help_text='help text goes here')
co_localidade_mec = models.ForeignKey('comum.localidade', on_delete=models.CASCADE, db_column='co_localidade_mec', null=True, help_text='help text goes here')
class Meta:
managed = False
db_table = 'schema1"."academic_unity'
class Course(models.Model):
id_course = models.AutoField(primary_key=True, help_text='help text goes here')
name = models.CharField(max_length=100, null=True, help_text='help text goes here')
id_unity = models.ForeignKey(AcademicUnity, on_delete=models.CASCADE, db_column='id_unity', null=True, help_text='help text goes here')
class Meta:
managed = False
db_table = 'schema1"."course'
class AcademicUnitySerializer(serializers.ModelSerializer):
class Meta:
model = AcademicUnity
fields = '__all__'
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = '__all__'
class APICursoView(APIView):
permission_classes = (IsAuthenticated, )
@swagger_auto_schema(
request_body=AcademicUnitySerializer,
responses={
'200': 'Successfull Request',
'400': "Bad Request"
},
operation_id='Academic Unity Data',
operation_description='Endpoint description'
)
def post(self, request):
serializer_class_academic_unity = AcademicUnitySerializer
academic_unity_serializer = self.serializer_class_academic_unity(data=request.data)
valid = academic_unity_serializer.is_valid(raise_exception=True)
if valid:
academic_unity_serializer.save()
status_code = status.HTTP_201_CREATED
response = {
'success': True,
'code': status_code,
'message': 'Success message!',
'Academic Unity': academic_unity_serializer.data
}
return Response(response, status=status_code)
else:
status_code = status.HTTP_400_BAD_REQUEST
return Response(academic_unity_serializer.errors, status=status_code)
@swagger_auto_schema(
request_body=CourseSerializer,
responses={
'200': 'Successfull Request',
'400': "Bad Request"
},
operation_id='Course Data',
operation_description='Endpoint description'
)
def post(self, request):
serializer_class_course = CourseSerializer
course_serializer = self.serializer_class_course(data=request.data)
valid = course_serializer.is_valid(raise_exception=True)
if valid:
course_serializer.save()
status_code = status.HTTP_201_CREATED
response = {
'success': True,
'code': status_code,
'Message': 'success message!',
'Course': course_serializer.data
}
return Response(response, status=status_code)
else:
status_code = status.HTTP_400_BAD_REQUEST
return Response(course_serializer.errors, status=status_code)
这是我的序列化程序。py:
class AcademicUnity(models.Model):
id_unity = models.AutoField(primary_key=True, help_text='help text goes here')
name_unity = models.CharField(max_length=100, null=True, help_text='help text goes here')
sigla = models.CharField(max_length=100, null=True, help_text='help text goes here')
co_localidade_mec = models.ForeignKey('comum.localidade', on_delete=models.CASCADE, db_column='co_localidade_mec', null=True, help_text='help text goes here')
class Meta:
managed = False
db_table = 'schema1"."academic_unity'
class Course(models.Model):
id_course = models.AutoField(primary_key=True, help_text='help text goes here')
name = models.CharField(max_length=100, null=True, help_text='help text goes here')
id_unity = models.ForeignKey(AcademicUnity, on_delete=models.CASCADE, db_column='id_unity', null=True, help_text='help text goes here')
class Meta:
managed = False
db_table = 'schema1"."course'
class AcademicUnitySerializer(serializers.ModelSerializer):
class Meta:
model = AcademicUnity
fields = '__all__'
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = '__all__'
class APICursoView(APIView):
permission_classes = (IsAuthenticated, )
@swagger_auto_schema(
request_body=AcademicUnitySerializer,
responses={
'200': 'Successfull Request',
'400': "Bad Request"
},
operation_id='Academic Unity Data',
operation_description='Endpoint description'
)
def post(self, request):
serializer_class_academic_unity = AcademicUnitySerializer
academic_unity_serializer = self.serializer_class_academic_unity(data=request.data)
valid = academic_unity_serializer.is_valid(raise_exception=True)
if valid:
academic_unity_serializer.save()
status_code = status.HTTP_201_CREATED
response = {
'success': True,
'code': status_code,
'message': 'Success message!',
'Academic Unity': academic_unity_serializer.data
}
return Response(response, status=status_code)
else:
status_code = status.HTTP_400_BAD_REQUEST
return Response(academic_unity_serializer.errors, status=status_code)
@swagger_auto_schema(
request_body=CourseSerializer,
responses={
'200': 'Successfull Request',
'400': "Bad Request"
},
operation_id='Course Data',
operation_description='Endpoint description'
)
def post(self, request):
serializer_class_course = CourseSerializer
course_serializer = self.serializer_class_course(data=request.data)
valid = course_serializer.is_valid(raise_exception=True)
if valid:
course_serializer.save()
status_code = status.HTTP_201_CREATED
response = {
'success': True,
'code': status_code,
'Message': 'success message!',
'Course': course_serializer.data
}
return Response(response, status=status_code)
else:
status_code = status.HTTP_400_BAD_REQUEST
return Response(course_serializer.errors, status=status_code)
这是我的观点。py:
class AcademicUnity(models.Model):
id_unity = models.AutoField(primary_key=True, help_text='help text goes here')
name_unity = models.CharField(max_length=100, null=True, help_text='help text goes here')
sigla = models.CharField(max_length=100, null=True, help_text='help text goes here')
co_localidade_mec = models.ForeignKey('comum.localidade', on_delete=models.CASCADE, db_column='co_localidade_mec', null=True, help_text='help text goes here')
class Meta:
managed = False
db_table = 'schema1"."academic_unity'
class Course(models.Model):
id_course = models.AutoField(primary_key=True, help_text='help text goes here')
name = models.CharField(max_length=100, null=True, help_text='help text goes here')
id_unity = models.ForeignKey(AcademicUnity, on_delete=models.CASCADE, db_column='id_unity', null=True, help_text='help text goes here')
class Meta:
managed = False
db_table = 'schema1"."course'
class AcademicUnitySerializer(serializers.ModelSerializer):
class Meta:
model = AcademicUnity
fields = '__all__'
class CourseSerializer(serializers.ModelSerializer):
class Meta:
model = Course
fields = '__all__'
class APICursoView(APIView):
permission_classes = (IsAuthenticated, )
@swagger_auto_schema(
request_body=AcademicUnitySerializer,
responses={
'200': 'Successfull Request',
'400': "Bad Request"
},
operation_id='Academic Unity Data',
operation_description='Endpoint description'
)
def post(self, request):
serializer_class_academic_unity = AcademicUnitySerializer
academic_unity_serializer = self.serializer_class_academic_unity(data=request.data)
valid = academic_unity_serializer.is_valid(raise_exception=True)
if valid:
academic_unity_serializer.save()
status_code = status.HTTP_201_CREATED
response = {
'success': True,
'code': status_code,
'message': 'Success message!',
'Academic Unity': academic_unity_serializer.data
}
return Response(response, status=status_code)
else:
status_code = status.HTTP_400_BAD_REQUEST
return Response(academic_unity_serializer.errors, status=status_code)
@swagger_auto_schema(
request_body=CourseSerializer,
responses={
'200': 'Successfull Request',
'400': "Bad Request"
},
operation_id='Course Data',
operation_description='Endpoint description'
)
def post(self, request):
serializer_class_course = CourseSerializer
course_serializer = self.serializer_class_course(data=request.data)
valid = course_serializer.is_valid(raise_exception=True)
if valid:
course_serializer.save()
status_code = status.HTTP_201_CREATED
response = {
'success': True,
'code': status_code,
'Message': 'success message!',
'Course': course_serializer.data
}
return Response(response, status=status_code)
else:
status_code = status.HTTP_400_BAD_REQUEST
return Response(course_serializer.errors, status=status_code)
最后,如何在url.py上调用不同的序列化程序视图?这就是它现在的样子,但它现在正在工作(仅显示一个序列化程序(仅课程)):
URL模式=[
path('ApiCurso/AcademicUnity', APICursoView.as_view(), name='academic unity'),
path('ApiCurso/Course', APICursoView.as_view(), name='course'),
]你到底想做什么?