* * *
### 1\. 介绍内容
如果你有一个需求, 你开发的 Django 项目 API 中需要同时返回两个模型类的序列化数据, 这个时候你可能会想, 可以一个个实现查询, 在用 Response 对象返回就好了。 **那我偏不!**
Django 组件 `django-rest-multiple-models` 帮你满足你的需求, 可以实现多个模型的序列化, 只需要你的配置信息即可。
>本期小编推送2021初学者一定会用到的Python资料,含有小编自己呕心沥血整理的免费书籍/视频/在线文档和编辑器/源代码,关于`Python`的安装qun:850973621
 ### 2\. PIP 安装
使用 `Python-pip` 安装:
```
 python3 -m pip install django-rest-multiple-models
 复制代码
 ```
### 3\. 配置和基本使用
在 Django 项目 `settings.py` 中注册组件 APP:
```
 INSTALLED_APPS = [
     ...
     'drf_multiple_model',
 ]
 复制代码
 ```
这时候你就可以导入模块并实现你的功能了, 如:
```
 # Models
 class Play(models.Model):
     genre = models.CharField(max_length=100)
     title = models.CharField(max_length=200)
     pages = models.IntegerField()
class Poem(models.Model):
     title = models.CharField(max_length=200)
     style = models.CharField(max_length=100)
     lines = models.IntegerField()
     stanzas = models.IntegerField()
 复制代码
 ```
```
 # Serializers
 class PlaySerializer(serializers.ModelSerializer):
     class Meta:
         model = Play
         fields = ('genre', 'title', 'pages')
class PoemSerializer(serializers.ModelSerializer):
     class Meta:
         model = Poem
         fields = ('title', 'stanzas')
 复制代码
 ```
在上面的案例中我们定义了 Models 和 Serializer, 现在可以直接撰写 API 视图类:
```
 from drf_multiple_model.views import ObjectMultipleModelAPIView
class TextAPIView(ObjectMultipleModelAPIView):
     querylist = [
         {'queryset': Play.objects.all(), 'serializer_class': PlaySerializer},
         {'queryset': Poem.objects.filter(style='Sonnet'), 'serializer_class': PoemSerializer},
     ]
 复制代码
 ```
你就可以获取到类似于下面的响应数据:
```
 {
     'Play' : [
         {'genre': 'Comedy', 'title': "A Midsummer Night's Dream", 'pages': 350},
         {'genre': 'Tragedy', 'title': "Romeo and Juliet", 'pages': 300},
         ...
     ],
     'Poem' : [
         {'title': 'Shall I compare thee to a summer's day?', 'stanzas': 1},
         {'title': 'As a decrepit father takes delight', 'stanzas': 1},
         ...
     ]
 }
 复制代码
 ```
你也可以使用 `FlatMultipleModelAPIView` 来继承:
```
 from drf_multiple_model.views import FlatMultipleModelAPIView
class TextAPIView(FlatMultipleModelAPIView):
     querylist = [
         {'queryset': Play.objects.all(), 'serializer_class': PlaySerializer},
         {'queryset': Poem.objects.filter(style='Sonnet'), 'serializer_class': PoemSerializer},
         ...
     ]
 复制代码
 ```
你将会得到:
```
 [
     {'genre': 'Comedy', 'title': "A Midsummer Night's Dream", 'pages': 350, 'type': 'Play'},
     {'genre': 'Tragedy', 'title': "Romeo and Juliet", 'pages': 300, 'type': 'Play'},
     ....
     {'title': 'Shall I compare thee to a summer's day?', 'stanzas': 1, 'type': 'Poem'},
     {'title': 'As a decrepit father takes delight', 'stanzas': 1, 'type': 'Poem'},
     ...
 ]
 复制代码
 ```
当然可以进行过滤和分页, 以及其他的属性, 如使用标签等等
> Success is the ability to go from one failure to another with no loss of enthusiasm. — Winston Churchill
 > 
 > 成功是一个人从一次失败走向另一次失败而没有丧失热情的能力。---温斯顿邱吉尔
来源:oschina
链接:https://my.oschina.net/u/4904437/blog/4888268