Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest框架:如何在一个视图中序列化两个或多个序列化程序?_Django_Django Models_Django Rest Framework_Django Views_Django Serializer - Fatal编程技术网

Django rest框架:如何在一个视图中序列化两个或多个序列化程序?

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

首先,我想说我是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'),

]

你到底想做什么?