2017-02-04 18 views
1

我有一個自定義序列化器,它包含一些其他模型序列化器,數據字段以及用於管理多對多關係的列表字段。這是一個例子。在DRF中管理自定義序列化器的最佳方法

class CustomSerializer(serializers.Serializer): 
    a_model_serializer = AModelSerializer() 
    b_model_serializer = serializers.ListField(child=CModelSerializer()) 
    another_field = serializers.CharField() 

在此基礎上串行我要創建一些模型對象和一些多對多關係通過第三個表。現在,什麼可能是管理這種情況的最佳方式。

+0

也許你可以使用'SerializerMethodField'更好地操縱嵌套字段 – blueSurfer

+0

@blueSurfer我覺得你沒明白我的問題。在這個(CustomSerializer)序列化程序中,我必須創建一些模型實例和一些多對多的關係。然後我必須使用AModelSerializer實例的ID返回數據,稍後必須管理序列化程序的更新。 –

回答

0

覆蓋serializers.Serializer的create()函數。並且要管理更新,請覆蓋update()函數。

class CustomSerializer(serializers.Serializer): 
    a_model_serializer = AModelSerializer() 
    b_model_serializer = serializers.ListField(child=CModelSerializer()) 
    another_field = serializers.CharField() 

    def create(self, validated_data): 
     print(validated_data) 
     # Do your custom create 

    def update(self, instance, validated_data): 
     print(validated_data) 
     # Do your custom update 

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

+0

如果我採用這種方法,那麼我如何在視圖中使用這個序列化程序以及哪種方法會方便?最後,我將如何從創建和更新方法返回值? –

+0

那麼,如果您使用DRF,那麼當您向Web服務器發送HTTP POST或PUT請求時將調用這些函數。它會向您指定的視圖集的URL發送請求,該視圖將調用序列化程序類以使用數據創建或更新。 – zubhav

相關問題