给出2个主要模型:TransportOrder和Company通过TransportOrderConsumer建立多对多的关系。我想实现以下目标。
GET 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但是把它称为" consumer"以便get和post调用之间保持一致。
总结问题,是否有可能在一个序列化程序中消费者与公司对象相关,而在第二个(POST)中,消费者字段是否为TransportOrderConsumerSerializer?
答案 0 :(得分: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