ModelSerializerサプリメントとListSerializer

インテグラ単一の変更

ルーティング層、モデル層、ビューのみの層を処理する必要がある、シーケンス層を変更する必要はありません。views.py

「」」
1)単一の全体的な変化は、修正されたデータの受信を提供するために記載し、データを検証する必要があり、検証データは、インスタンスのデータに割り当てられた「配列クラスのオブジェクト」でなければなりません
2)変性、インスタンスに割り当て、「クラスオブジェクトのシリアル化の」モデルクラス、およびインスタンスを変更されたオブジェクトの明確でなければなりません
「クラスオブジェクトの配列」のインスタンスで部分パラメータのデフォルトはfalseであるため3)全体的な変更は、すべての検証ルールが必要としている= Trueのフィールドは、提供されなければなりません


注:一部の値がTrueに設定されている場合、つまり、ローカルで変更することができます
1)一般的に置く要求で、単一の全体を変更:
V2BookModelSerializer(
    インスタンス=オブジェクトが更新されます、 
    更新するデータ=データ、
    Falseの部分=デフォルト、チェックすべてのフィールドに参加しなければなりません
通常、パッチリクエストと2)単一のローカル変更、:
V2BookModelSerializer(
    インスタンス=オブジェクトが更新されます、 
    更新するデータ=データ、
    部分= Trueの設定、フィールドはオプションフィールドになっている必要があります
    注意:一部の設定の本質は、フィールド必要= Trueの検証ルールが失敗することです
「」」
クラスV2Book(APIView):
    シングル全体的な変化:データV2 /書籍/(PK)/パスが辞書に対応するモデル名である{|価格|公開|著者} 
    DEF、(要求を自己のPUT、引数*、** kwargsから):
        request_data = request.data
        PK = kwargs.get(' PK ' 
        old_book_obj = models.Book.objects.filter(PK = PK)1次回()  我々は(更新を保存行くときなしインスタンスの知っている誰にも負けないソースからは)我々はゾーイ更新データにこれを取得する必要があり、オブジェクト、instancに割り当てる
        #の目的を:処理するためのクラスをシリアル化するデータの数を確認するために-みましょうシリアライズデシリアライズロールプレイングクラス、検証が成功した後、あなたはストレージに置く助けるためにクラスのシーケンス 
        book_ser =シリアライザ.V2BookModelSerializer(= old_book_obj例えば、データ= request_data、部分= 偽)
        book_ser.is_valid(RAISE_EXCEPTION = TRUE)
        チェックは、完全な更新データを渡します。ターゲットが更新される、新しいデータを更新するために使用される 
        book_obj = book_ser.saveを()

        返すレスポンス({
             ' 状態を' :0、
             ' MSG '' OK ' ' 結果' :serializers.V2BookModelSerializer(book_obj).dataセクション
        })

シングル全体のローカルを変更

層シーケンス:serializers.py
#のキー:ListSerializerとModelSerializer関連がある:クラスMeta ModelSerializerの- list_serializer_class 
クラスV2BookListSerializer(ListSerializer):
     DEF 更新(自己、例えば、validated_data):
        印刷(インスタンス)#オブジェクトその更新するために、
        #の印刷を(validated_data )#更新されたオブジェクトに対応するデータがある
        V2BookModelSerializerは-印刷(self.child)#モデルのシリアライゼーションクラスのサービスを
        するために、インデックス、OBJ :列挙(インスタンス)
            self.child.update(OBJ、validated_data [インデックス])
        返すインスタンスを
    
オリジナルモデル系列変動クラスの
クラスV2BookModelSerializer(ModelSerializer):
     クラスのメタ- :
        ... 
        グループの変更は、それがカスタムListSerializerを設定する必要があり、グループの更新方法のオーバーライドが変更 
        list_serializer_class = V2BookListSerializer
     ...
ビュー層:views.py
クラスV2Book(APIView):
    シングルローカルで変更:データV2 /書籍/(PK)/通過し、オプションのデータフィールドが鍵となる
    #1 ローカルで変更グループ:V2 /書籍/のための
    #の要求データ- [{PK:1 、名前:123}、{PK :. 3 ,.価格:. 7}、{PK :. 7は、発行:2}] 
    DEFパッチ(セルフ、要求、*引数、** kwargsから)。
        request_data = request.data
        PK = kwargs.get(' PK ' 

        単一の変更は、データグループの変更がのPKS =にフォーマットされている[オブジェクトは、主キー識別子が必要とされるように] | request_data = [対応する各オブジェクトの変更されたデータを変更するに】
        IF PK でisinstance(request_data、辞書):  単一の変更 
            = PKS [PK、】
            request_data = [request_data、】
            
            
        elif  ていない PK でisinstance(request_data、リスト):#1 基が修飾された 
            PKS = []
             のために DIC  request_data:  前景のデータを横断[{PK 1、名前: 123}、{PK:3、価格:7}、{PK :7、発行:2}] 、 1つの辞書取る
                #はノーリターンなし場合、フィールド内のpK値から飛び出し 
                PK = dic.pop(PK 、なし)
                 #のアクションは、次のされていませんなしに直接、その後されていない例外を返し、そうデータがダウンすることができ、PKSは一対一にrequest_dataあれば値PKのPKSに添加
                IF PK:
                    pks.append(PK)
                返すレスポンスを({
                         ステータス:1 MSG データエラー
                    })
        返すレスポンスを({
                 ステータス:1 MSG データエラー
            })

        
        request_dataデータフィルタリングとPKS、 
        1)は、対応するデータが削除されていないとデータPK、PK PKS除去され、request_dataも除去インデックスビットに対応するデータ
        #は2)合理的PKSを変換さOBJS 
        OBJS = []
        new_request_data = []
         のためのインデックス、PK 列挙(PKS):
             トライ#のPKデータは合理対応する、オブジェクトを格納するための合理的な 
                OBJ = models.Book.objects.get(PK = PK)
                objs.append(OBJ)
                データを保存する必要があるインデックスに対応する
                new_request_data.append(request_data [インデックス])
             を除くキー:負のチュートリアル-不正なデータに対応したPKを、削除request_dataに対応するインデックスデータ
                #のインデックス= pks.index( PK)
                #1 request_data.pop(インデックス)
                続行

        book_ser = serializers.V2BookModelSerializer(例えば= OBJS、データ= new_request_data、部分=真、多く= TRUE)
        book_ser.is_valid(RAISE_EXCEPTION = 真)
        book_objs = book_ser.save()

        返すレスポンス({
             ' 状態を' :0、
             ' MSG '' OK ' ' 結果':serializers.V2BookModelSerializer(book_objs、多くの= 真).dataセクション
        })

概要

「」」
全体及び局所修正変更差:部分= Trueの場合、フィールドはオプションのフィールドになるように、すなわちない再び全ての入力(全体的な局所変化に変更)
オブジェクトは、全体的な改革を渡すときために)(保存するために行くの更新プログラムを単一のインスタンスを与えることに注意してください
単一の全体及び部分PKおよびrequest_dataアレイに入れ、単一の、そしてデータをフィルタリングし、対応するオブジェクトは、オブジェクトPKの配列にオブジェクトを使用してデータベースから、アレイ上の対応するサイクルを行うPK 、新しい配列に対応するrequest_dataのPKデータ、およびデシリアライズして保存するための新しいrequest_data配列オブジェクトの配列を(データはPKを表示されますエラーになっていない場合)(多くの=真の点に注意してください)
「」」

シリアル化プロセスの概要

ser_obj = CarModelSerializer(データ)   (シリアル化が関与している可能性もデシリアライズ関与している可能性がある)クラスオブジェクトのシーケンスを生成 
ser_obj.dataの   シリアライズデータ 
ser_obj.is_valid()  検証ルールのブートシーケンス(システム含量=> =一部のフック>グローバルフック) 
ser_obj.save()一連の操作の検証後のデータ(変更、保存)

 

おすすめ

転載: www.cnblogs.com/AbrahamChen/p/11703476.html