【问题标题】:Django Rest Framework - Serializing relationship differently for GET and POSTDjango Rest Framework - 以不同的方式为 GET 和 POST 序列化关系
【发布时间】:2017-02-03 17:46:52
【问题描述】:

给定 2 个主要模型:TransportOrder 和 Company,通过 TransportOrderConsumer 建立多对多关系。我想实现以下目标。

获取 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 运输顺序: 在 POST 序列化程序中,我想嵌套一个 TransportOrderConsumerSerializer,但将其称为“消费者”,以便 get 和 post 调用之间保持一致。

总结问题,是否有可能在一个序列化程序中让消费者与公司对象相关,而在第二个(POST)中,消费者字段是 TransportOrderConsumerSerializer?

【问题讨论】:

  • 您能否提出一个问题来阐明您无法解决的实际问题是什么?

标签: python django django-rest-framework


【解决方案1】:

您可以使用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

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 2016-12-18
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多