2017-02-03 7 views
0

Gegeben 2 Hauptmodelle: TransportOrder und Unternehmen mit einer viel zu viele Beziehung durch TransportOrderConsumer. Ich möchte folgendes erreichen.Django Rest Framework - Serialisierung Beziehung anders für GET und POST

GET TransportOrder:

TransportOrder Felder sowie eine Liste mit Hyperlinks zu den Verbrauchern aufgeführt. ich dies durch die unter Beziehung auf die Gesellschaft und Serializer

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 Transportauftrag erreicht haben: Im POST Serializer, möchte ich ein TransportOrderConsumerSerializer nisten aber nennen es „Verbraucher“, so dass es Konsistenz zwischen den Get- und Post-Calls.

Um das Problem zusammenzufassen, ist es möglich, in einem Serializer haben Verbraucher Bezug auf Company-Objekte, und in der zweiten (der POST) haben die Verbraucher Feld ein TransportOrderConsumerSerializer?

+0

können Sie eine Frage formulieren, stellt klar, was das eigentliche Problem ist, dass Sie nicht lösen können? – trixn

Antwort

1

Sie würden get_serializer_class verwenden, um den Anforderungstyp für den zu verwendenden Serializer zu aktivieren.

Beispielcode:

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 
Verwandte Themen