Django Rest框架为GET和POST序列化不同的关系

2024-10-05 14:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

给出了两个主要模型:TransportOrder和通过TransportOrder消费者建立多对多关系的公司。我想实现以下目标

获取运输订单:

TransportOrder字段以及指向使用者的超链接列表都会列出。 我已经完成了这一点,通过以下关系对公司和序列化程序

consumers = models.ManyToManyField(Company, through = "TransportOrderConsumer")

class TransportOrderReadSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = TransportOrder
        # fields = ('id', 'producer_system_code', 'status','producer', 'created_at')
        fields = (
            'id',
            'producer',
            'producer_system_code',
            'status',
            'producer',
            'created_at',
            'updated_at',
            'consumers'
        )
        # read_only_fields = ('updated_at')  

运输后订单: 在POST序列化程序中,我想嵌套TransportOrderConsumerSerializer,但将其称为“consumers”,以便get和POST调用之间保持一致

总结一下这个问题,是否可以在一个序列化程序中让使用者与公司对象相关,而在第二个(POST)中让使用者字段是transportordersummerserializer


Tags: producer订单程序idfields序列化关系使用者
1条回答
网友
1楼 · 发布于 2024-10-05 14:22:17

您可以使用get_serializer_class为要使用的序列化程序打开请求类型

示例代码:

from rest_framework import viewsets

class MyViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()

    def get_serializer_class(self):
        """
        :return: serializer class based on the request type
        """
        if self.action == 'retrieve':
            return ps.MyModelDetailSerializer
        elif self.action == 'list':
            return ps.MyModelListSerializer
        elif self.action == 'create':
            return ps.MyModelCreateSerializer
        else:
            return ps.MyModelUpdateSerializer

相关问题 更多 >