まず、知識
図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__ '