2017-02-03 88 views
0

鑑於2個主力車型序列化的關係是不同的:TransportOrder和公司以多對多的關係,通過TransportOrderConsumer。我想實現以下目標。Django的REST框架 - 對GET和POST

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但稱之爲「消費者」,以便有get和post調用之間的一致性。

爲了總結這個問題,是否有可能在一個序列化程序中將消費者與公司對象相關聯,並且在第二個(POST)中將消費者字段設置爲TransportOrderConsumerSerializer?

+0

你可以制定該澄清的是,你解決不了實際問題的一個問題? – trixn

回答

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