(カスタムModelSerializerl)のrestframework相補的な配列

まず、知識

図1に示すように、ソース

タイトル= serializers.CharField(ソース= ' courses.title '

one2one、foreginkey、選択肢、およびとの結果を得るためのソース

2、SerializerMethodField

    タイトル= serializers.CharField(ソース= ' courses.title ' 
    recommend_courses = serializers.SerializerMethodField() = serializers.SerializerMethodField()

    DEF get_recommend_courses(自己、OBJ):
        rc_list = obj.recommend_courses.all()
         戻り [{ ' のid ':rc_obj.id、' タイトル:rc_obj.title} ため rc_obj rc_list] 

    DEF get_chapter(自己、OBJ):
        query_set =obj.courses.chapter_set.all()
         印刷" =============> "、query_set)  <クエリセット[<章:基础语法>、<章:函数>、<章:面向对象>]> 
        リターン [{ ' ID ':obj.id、' 名称':obj.name} ため OBJ におけるquery_set] 

    クラスメタ:
        モデル = CourseDetail 
        フィールドは = [ ' ID '' スローガン'' なぜ'タイトル' ' recommend_courses ' ' " ]

結果SerializerMethodField many2manyと複数の値を取得する(クエリセット)

3、深さ(一般的にしないでください)

関係のテーブルに従って深さ

データをフェッチするデータの大きい量、現像液の前端は、不都合を生じる場合

深度値0-10

クラスCourseDetailSerializer(serializers.ModelSerializer):
     "" " 
    课程细节序列化
    """ 
    クラスのメタ:
        モデル = CourseDetailの
         #1 フィールド= [ 'ID'、 'スローガン'、 'なぜ'、 'タイトル'、 'recommend_courses'、「の章'] 

        フィールド = ' __all__ ' 
        深さ = 0

、深さ0

 

 B、深さ1

 

第二に、例:

models.py

django.db インポートモデル

ここにあなたのモデルを作成します壁紙。


クラスのコース、(models.Model):
     "" " 
    カリキュラム
    " "" 
    タイトル = models.CharField(verbose_name = " コース名"、MAX_LENGTH = 32 
    course_img = models.CharField (verbose_name = " コース画像"、MAX_LENGTH = 128 
    level_choices =  1、' 一次' )、  2、' 中間' )、 3、' シニア' 
    レベル = models.IntegerField(verbose_name = " コースの評価"、選択肢=のlevel_choices)

    DEF  __str__ (セルフ):
         リターンself.titleの


クラスCourseDetail(models.Model):
     "" " 
    コースの詳細テーブル
    " "" 
    コース models.OneToOneField =(verbose_name = " カリキュラム"、=に" もちろん、"、on_delete = models.CASCADE)
    スローガン = = models.CharField(verbose_name " スローガン"、MAX_LENGTH = 255
    なぜ = models.CharField(verbose_name = " なぜ私たちが学ぶべきか"、MAX_LENGTH = 255 
    recommend_courses = models.ManyToManyField(verbose_nameは= " コースをお勧めします"、=に" コース、"、related_name = " RC " 

    DEF  __str__ (セルフ) :
         リターンself.courses.title 


クラスの章(models.Model):
     "" " 
    カリキュラムの章テーブル
    " "" 
    NUM = models.IntegerField(verbose_nameは= " "
    の名前= models.CharField(verbose_name = " 章节名称"、MAX_LENGTH = 32 
    コース = models.ForeignKey(verbose_name = " 所属课程"、=に" コース"、on_delete = models.CASCADE)

    DEF  __str__ (自己):
         戻り自己。名前

連載

api.models インポート章、コース、CourseDetail
 から rest_framework インポートシリアライザ



クラス:CourseSerializer(serializers.ModelSerializer)
     "" " 
    课程表序列化
    """ 
    レベル = serializers.CharField(ソース= " get_level_display " 

    クラスメタ:
        モデル = もちろん
        フィールド = [ ' ID '' タイトル'' course_img ''レベル' ] 


クラスCourseDetailSerializer(serializers.ModelSerializer):
     "" " 
    课程细节序列化
    """ 
    タイトル = serializers.CharField(ソース= ' courses.title ' 
    recommend_courses = serializers.SerializerMethodField() = serializers.SerializerMethodField()

    DEF get_recommend_courses (自己、OBJ):
        rc_list = obj.recommend_courses.all()
         戻り [{ ' ID ':rc_obj.id、' タイトル':rc_obj。タイトル} のためにrc_obj rc_list] 

    デフget_chapter(自己、OBJ):
        query_set = obj.courses.chapter_set.all()
         印刷" =============> "、query_set)  <クエリセット[<章:基础语法>、<章:函数>、<章:面向对象>]> 
        リターン [{ ' ID ':obj.id、' 名称':obj.name} ため OBJ におけるquery_set] 

    クラス:メタ
        モデル = CourseDetailの
        フィールド = [ ' ID '' スローガン'' なぜ'' タイトル'' recommend_courses '' ' ] 


クラスChapterSerializer(serializers.ModelSerializer):
     "" " 
    课程章节序列化
    """ 
    クラスのメタ:
        モデル = 
        フィールド = ' __all__ '

 

おすすめ

転載: www.cnblogs.com/wt7018/p/11530962.html
おすすめ