若是你有一个需求, 你开发的 Django 项目 API 中须要同时返回两个模型类的序列化数据, 这个时候你可能会想, 能够一个个实现查询, 在用 Response 对象返回就行了。 那我偏不!html
Django 组件 django-rest-multiple-models
帮你知足你的需求, 能够实现多个模型的序列化, 只须要你的配置信息便可。python
使用 Python-pip
安装:shell
python3 -m pip install django-rest-multiple-models
复制代码
在 Django 项目 settings.py
中注册组件 APP:django
INSTALLED_APPS = [
...
'drf_multiple_model',
]
复制代码
这时候你就能够导入模块并实现你的功能了, 如:json
# 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 视图类:spa
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},
]
复制代码
你就能够获取到相似于下面的响应数据:rest
{
'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
来继承:code
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},
...
]
复制代码
你将会获得:cdn
[
{'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'},
...
]
复制代码
固然能够进行过滤和分页, 以及其余的属性, 如使用标签等等, 给个文档给你吧:官方说明文档htm
Success is the ability to go from one failure to another with no loss of enthusiasm. — Winston Churchill
成功是一我的从一次失败走向另外一次失败而没有丧失热情的能力。---温斯顿邱吉尔