インテグラ単一の変更
ルーティング層、モデル層、ビューのみの層を処理する必要がある、シーケンス層を変更する必要はありません。views.py
「」「 データに割り当てられたクラスのオブジェクトをシリアル化「、1)単一の全体的な変化は、修正されたデータの受信を提供するために記載し、データがインスタンス化されるべき検証データで、検証される必要がある」 修飾2)、それは透明でなければなりませんモデル・クラス・オブジェクト、およびインスタンスに割り当て、「クラスオブジェクトのシリアル化の」インスタンスを修飾 。3)一体修正、すべての検証ルールが必要としている= Trueのフィールドは、シーケンス・クラス」の例のように、提供されなければなりませんオブジェクトは、「デフォルトパラメータがFalseの部分であるとき 注:一部の値がTrueに設定されている場合、それはローカルで変更することができ 、1)単一全体の変更を一般的にすることによって、要求を置く: V2BookModelSerializer( インスタンス=オブジェクトが更新される、 データがデータを更新するために使用されます= 、 Falseの部分的デフォルト=は、チェックすべてのフィールドに参加しなければならない ) 通常のパッチリクエストと2)単一のローカル変更、: V2BookModelSerializer( 更新されるインスタンス=オブジェクト、 データ=データを更新するために、 真部分集合=、しなければなりませんフィールドはオプションフィールドになる ) 注:部分集合真の本質が必要= 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次回() #1 目的:クラスにデータ系列の数を確認します対処する-検証が成功した後、シリアライズデシリアライズロールプレイングクラスを聞かせて、クラスのシーケンスを使用すると、ストレージに入れ支援する book_ser = serializers.V2BookModelSerializer(例えば= old_book_obj、データ= request_data、部分= False)が book_ser.is_valid(RAISE_EXCEPTION =真) #チェック渡し、更新データが完了したターゲットを更新する、新しいデータを更新する book_obj = book_ser.save() を返すレスポンス({ 「ステータス」:0、 「MSG 」:「OK 」、 " 結果' :serializers.V2BookModelSerializer(book_obj).DATA })
シングル全体のローカルを変更
#キー:ListSerializerとModelSerializer関連がある: メタクラス#ModelSerializerの- list_serializer_class クラスV2BookListSerializer(ListSerializer): DEF 更新(自己、例えば、validated_data): #の印刷(インスタンス) #オブジェクトその更新するために、 #の印刷を(validated_data ) #更新されたオブジェクトに対応するデータは、 #1 印刷(self.child) V2BookModelSerializer - #モデルシリアライゼーションクラスのサービス のためのインデックス、OBJ で:列挙(インスタンス) self.child.update(OBJ、validated_data [インデックス]) 戻りインスタンス #元のモデル系列変動クラスの クラスV2BookModelSerializer(ModelSerializer): クラスメタ: #... #のグループ変更は、それがカスタムListSerializerを設定する必要があり、グループの更新方法のオーバーライドが変更 list_serializer_class = V2BookListSerializer #...
クラス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を辞書): #1 つの修飾された 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}]、 辞書取る PK = dic.pop(' PK ' 、なし)を IF PK: pks.append(PK) 他: 返す応答({ ' ステータス':1 、 "MSG ':' データエラー' })他: 返す応答({ ' ステータス':1 、 ' MSG ':' データエラー' 、 })#1 PKSスクリーニングおよびrequest_dataデータ#1)PKSではありません削除されたデータと対応するデータのPK PKが除去され、インデックス・ビットに対応するデータはまたrequest_data除去#は2)OBJS合理的PKSを変換さ OBJS = [] new_request_data = [] のためのインデックス、PK で 列挙(PKS): 試してみる: #のオブジェクトを格納することが合理的、合理的な対応PKデータ、 OBJ = models.Book.objects.get(PK = PK) objs.append(OBJ) #インデックスデータに対応するには、保存する必要 new_request_dataを。追記(request_data [インデックス]) を除く: #キー:負チュートリアル-誤ったデータに対応するPK、除去request_dataに対応するインデックスデータ #1 インデックス= pks.index(PK) #1 request_data.pop(インデックス)が 続行 book_serを serializers.V2BookModelSerializer =(= OBJS例えば、データ= new_request_data、部分= Trueの多く= TRUE) book_ser.is_valid(RAISE_EXCEPTION =真) book_objs = book_ser.save() 戻り応答({ ' ステータス' :0、 ' MSG ':' OK ' 、 ' 結果':serializers.V2BookModelSerializer(book_objs、多く= 真).DATA })