データテーブルBを取得する方法とき、表Aのジャンゴレストフレームワーク配列

次のモデル

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]}

此时接口返回信息为:

 

满足要求,实现 

 

おすすめ

転載: www.cnblogs.com/gcgc/p/12101571.html
おすすめ