2017-12-10 6 views
0

代わりにオーバーライドされたメソッドのデフォルトのシリアライザのメソッドを作成して呼び出し、私は、オーバーライドして、ネストされたシリアライザを持っている方法で作成します。Djangoの残りのビューセットが

class OrderSerializer(serializers.ModelSerializer): 
    data_model=Order 
    user = UserSerializer(many=False) 


    class Meta: 
     model = Order 
     fields = ['uid', 'user','price'] 

    def create(self, validated_data): 
     validated_data=validated_data.pop('user') 
     order=self.data_model.objects.create(**validated_data) 
     order.user=self.context['request'].user 
     order.save() 
     return order 

class LifeOrderSerializer(OrderSerializer): 
    data_model =LifeOrder 

    class Meta(OrderSerializer.Meta): 
     model = LifeOrder 
     fields = OrderSerializer.Meta.fields + [ "birth_year", 
              "contract_duration",] 

とviews.py

class OrderViewSet(viewsets.ModelViewSet): 
    queryset_model = LifeOrder 
    serializer_class = LifeOrderSerializer 
    def get_queryset(self): 
      self.queryset_model.objects.all() 

中を私は送るとき作成するポストリクエスト、モデラーシリアライザのデュアルメソッド作成メソッドが呼び出されます!何が問題ですか?

+0

デフォルトのcreate()が呼び出されたことをどのように確認しましたか? – rajkris

+0

デバッグモードでブレークポイントを確認することによって、 –

答えて

0

ビューセットに言及したserializer_classがLifeOrderSerializerですが、私はそれがcreate()が上書きされ、シリアライザであるから、それは、OrderSerializerでなければならないと思います。 LifeOrderSerializerOrderSerializerの子である場合には

、あなたはそれを動作させるためにLifeOrderSerializercreate()メソッドをオーバーライドしていることを確認してください。以下のような

何か:

def create(self, validated_data): 
    order = super(OrderSerializer, self).create(validated_data) 
    return order 
+0

はこのシリアライザの親です。追加するのを忘れました –

+0

質問を更新してください。 – rajkris

+0

答えを更新しました。 – rajkris

0

それは私自身の作成関数を呼び出す前に例外を発生ModelViewSetのCreateModelMixinました。 モデルビューセットを作成して問題を解決しました!

関連する問題