次のモデル
django.db インポートモデル #ここにあなたのモデルを作成します壁紙。 クラス著者(models.Model): 「」「 テーブルのブック 」「」 名前 = models.CharField(「著者名」、MAX_LENGTH = 20 ) 年齢 = models.SmallIntegerField(' 年齢' ) DEF __str__ (自己): 戻りself.nameの クラスブック(models.Model): "" " ブックテーブル " "" BOOK_NAME = models.CharField(' 本のタイトル'、MAX_LENGTH = 100) 著者 = models.ForeignKey(著、related_name = ' author_book ' ) publish_time = models.DateTimeField(' 出版时间'、auto_now_add = 真) デフ __str__ (自己): 戻り self.book_name
(実際には、現実はここに外部キーに減少し、多くの関係で本の相当数であってもよい)著者は本の著者に対応した複数の代表、外部キーフィールドであるテーブルを予約
次のようにクラスを表示します。
rest_framework 輸入ジェネリック、シリアライザ から ..models インポート著者の クラス:AuthorSerializer(serializers.ModelSerializer) クラスのMeta: モデル = 著者 のフィールド = 「__all__ 」 クラス:AuthorList(generics.ListAPIView) 「」 " すべての情報、および対応を照会します書かれた本 "" " クエリセット = Author.objects.all() serializer_class = AuthorSerializer
上記のモデルは、出力インターフェイス情報をシリアライズ著者:
著者に対応するすべての書籍を返す:我々は、需要が今そこにあることを前提としています。
分析:
上記のシーケンスの作成者情報の読み取りのみモデルの実現、そのインタフェース自体が唯一のテーブルのフィールドに返されることを、対応する書籍情報テーブルを返す必要がモデル全体ブックからデータを取得する必要があります。
改造Author的序列化器为如下:
class AuthorSerializer(serializers.ModelSerializer): # 该字段信息通过下方的get_books方法获取数据 books = serializers.SerializerMethodField() class Meta: model = Author fields = '__all__' # 方法名称必须与上面定义的序列化字段一致,格式为:"get_自定义字段名" def get_books(self, author_obj): # 通过book模型中的author字段的related_name反查出作者对应的图书集合 book_query_set = author_obj.author_book.all() # 遍历图书集合获取图书的名称和出版时间,并返回 return {'count': book_query_set.count(), "data": [{'name': book_obj.book_name, 'publish_time': book_obj.publish_time} for book_obj in book_query_set]}
此时接口返回信息为:
满足要求,实现