2016-09-29 50 views
3

我有一個具有被存儲在兩個單獨的表某種類型的每個對象數據庫模式(在各表中的一行,在每個不同的數據,以從一個到另一個的外鍵。)如何在Django Rest Framework中的一個序列化程序中更新兩個模型?

不幸的是, Django Rest Framework傾向於假定序列化程序和模型之間存在一對一的對應關係,這與我的情況不同。我應該如何處理這個問題?看起來序列化程序應該返回對象的表示形式,這將成爲ajax請求的實際HTTP響應,因此使用兩個序列化器似乎不正確。我已經看過擴展BaseSerializer(這是我目前如何計劃實現這個,如果我沒有找到更好的解決方案),但某些方法採取instance,其中應包含序列化對象所需的所有數據,而我有兩個實例相關。

任何意見將超級讚賞!謝謝。

回答

4

Writable nested representations部分可能會對您有所幫助。

您有2模特ModelAModelB。創建您的第一個模型的串行

class ModelASerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ModelA 
     fields = ('fields',..) # 

然後在其他型號的串行器添加的第一個串行和覆蓋所需的方法(如createupdate)。像這樣的東西:

class ModelBSerializer(serializers.ModelSerializer): 
    # add the serializer for the foreignkey model 
    model_a = ModelASerializer() 

    class Meta: 
     model = ModelB 
     fields = ('fields',..) # 

    def create(self, validated_data): 
     modela_data = validated_data.pop('model_a') 
     model_b = ModelB.objects.create(**validated_data) 
     ModelA.objects.create(model_b=model_b, **modela_data) 
     return model_b 

    # override update too .. 
相關問題