のジャンゴ/ DRFシーケンス

モード:ORM値を持つリスト()関数は、()直列化を実装します

book_list =リスト(Book.objects.all()の値())

第二の方法:その構成のリストは、それらの設定に空の辞書に、データ項目を削除し、辞書のリストに配置します

三つの方法:model_to_dict()

    django.forms.modelsからmodel_to_dictインポート
    books_obj = Book.objects.all()
    book_list = [] 
    :books_objにおける書籍の
        book_list.append(model_to_dict(書籍))を

 4つの方法:Djangoのシリアライズ・シリアライザ

    django.coreインポートシリアライザから
    book_obj = Book.objects.all()
    book_list = serializers.serialize( "JSON"、book_obj)

   !属性フィールドの任意の値を取得するための選択肢のジャンゴシーケンス

次の5つの方法:残りのフレームワークシリアライゼーションserializers.Serializerをジャンゴ

  serializer.pyを作成します。

rest_frameworkインポートシリアライザから
.modelsから*インポート
クラスBookSerializer(serializers.Serializer):
    ID = serializers.IntegerField(= Falseの必須)
    タイトル= serializers.CharField(MAX_LENGTH = 32、バリ= [my_validate])
    CHOICES =((1、 " Pythonの")、(2、 "行く")、(3、 "Linuxの"))
    カテゴリ= serializers.ChoiceField(選択肢= CHOICES、ソース=" get_category_display」、READ_ONLY =真)
    w_category = serializers.ChoiceField(選択肢= CHOICES、 WRITE_ONLY =真)
    pub_time = serializers.DateField()

    発行者= PublisherSerializer(READ_ONLY =真)
    PUBLISHER_ID = serializers.IntegerField(WRITE_ONLY =真)著者= AuthorSerializer(真=多く、READ_ONLY =真)
    author_list = serializers.ListField(WRITE_ONLY =真) 
        instance.pub_time = validated_data.get( "pub_time"、instance.pub_time)

    :DEF(自己、validated_data)を作成する
        ブック= Book.objects.create(タイトル= validated_data [ "タイトル"]、カテゴリ= validated_data [ "w_category"]、
                                pub_time = validated_data [ "pub_time"]、PUBLISHER_ID = validated_data [ "PUBLISHER_IDを" ])
        book.author.add(* validated_data [ "author_list"])
        戻りブック

    デフ更新(自己、例えば、validated_data):
        instance.title = validated_data.get( "タイトル"、instance.title)
        instance.category = validated_data。 ( "カテゴリ"、instance.category)を取得
        instance.publisher_id = validated_data.get( "PUBLISHER_ID"、instance.publisher_id)
        validated_data.get( "author_list")とします。 
            instance.author.set(validated_data [ "author_list"])
        instance.save()
        インスタンスを返す

    (自己、値)DEF validate_title:
        ではない"パイソン"ならvalue.lowerは():
            serializers.ValidationErrorを上げる( "标题必须含有パイソン")、
        返り値は

    DEF(自己、ATTRS)を検証する:
        もしATTRS [ "w_category"] == 1とATTRS [ "PUBLISHER_ID"] == 1:
            リターンATTRS 
        他:
            serializers.ValidationErrorを上げる( "分类以及标题不符合要求")

6つの方法:残りのフレームワークシリアライゼーションserializers.ModelSerializerをジャンゴ

  serializer.pyを作成します。

  #私たちは、あなたがシリアライズしたいコンテンツをカスタマイズすることができます

rest_frameworkインポートシリアライザから
.modelsからは*インポート
クラスBookSerializer(serializers.ModelSerializer):
    category_display = serializers.SerializerMethodField(READ_ONLY =真)
    publisher_info = serializers.SerializerMethodField(READ_ONLY =真)
    著者= serializers.SerializerMethodField(READ_ONLY =真)は

    デフ(get_category_displayセルフ、OBJ):
        obj.get_category_display返す()

    DEF get_authors(自己、OBJ):
        authors_query_set = obj.author.all()
        author_objために戻り[{author_obj.name "ID":author_obj.id、 "名前"} authors_query_set] 

    デフget_publisher_info(自己、OBJ):
        #OBJ是我们序列化的每个ブック对象
        publisher_obj = obj.publisher 
        リターン{ "ID":publisher_obj.id、 "タイトル":publisher_obj.title} 

    クラスメタ:
        モデル=ブック
        #フィールド= [ "ID"、 "タイトル"、 "pub_time"] 
        フィールド= "__all__" 
        #深さ= 1 
        extra_kwargs = { "カテゴリ":{ "WRITE_ONLY":真}、 "パブリッシャ":{ "WRITE_ONLY":真}、
                        "著者":{ "WRITE_ONLY":真}}

 

 

おすすめ

転載: www.cnblogs.com/shannen/p/11369636.html