从 Django Rest Framework 中的模型返回数据很简单。 为此,我们需要一个 urlpattern、一个视图和一个序列化程序。 但有时,在 DRF 中编写 REST API 时,我们可能希望我们的端点从两个或多个数据库表(模型)返回数据。 最近在我的一个项目中,我有这个任务,现在我将分享我是如何管理它的。
假设我们有两个模型。 项目和新闻:
from operator import modfrom django.db import models# Create your models here.class Project(models.Model): title = models.CharField(max_length=50) def __str__(self) -> str: return self.titleclass News(models.Model): title = models.CharField(max_length=100) class Meta: verbose_name_plural = "News" def __str__(self) -> str: return self.title现在,当然在运行迁移并将更改迁移到数据库之后,我们可以为每个模型创建序列化程序:
from rest_framework import serializersfrom .models import Project, Newsclass ProjectSerializer(serializers.ModelSerializer): class Meta: model = Project fields = '__all__'class NewstSerializer(serializers.ModelSerializer): class Meta: model = News fields = '__all__'创建视图和 URL 后,我们可以在 DRF Browsable API 中分别查看每个模型的数据:
现在我们想要一个端点同时返回两个查询集。 我们将创建一个新的基于函数的视图来负责运行逻辑。
首先我们应该得到查询集。
# first we get the querysetsprojects = Project.objects.all()news = News.objects.all()然后我们应该序列化查询集中的数据。
# then we serialize the dataprojects_serializer = ProjectSerializer(projects, many=True,context{'request': request})news_serializer = NewstSerializer(news, many=True, context={'request': request})data = projects_serializer.data + news_serializer.datareturn Response(data)这些对象包含序列化数据,因此我们可以通过“object.data”访问数据。
projects_serializer.data 将为我们提供一个列表,其中包含来自数据库的数据作为 OrderedDict。 news_serializer 也是如此。
我们可以添加这两个列表并返回。
我们不能直接返回数据,它应该以 HttpResponse 或 Response 的形式返回。 在 DRF 中,我们使用来自 rest_framework.response 的响应。
我们的完整视图功能将是:
@api_view(['GET'])def projects_and_news(request): if request.method == 'GET': # first we get the querysets projects = Project.objects.all() news = News.objects.all() # then we serializer the data projects_serializer = ProjectSerializer(projects, many=True, context={'request': request}) news_serializer = NewstSerializer(news, many=True, context= {'request': request}) data = projects_serializer.data + news_serializer.data return Response(data)我们可以看到在一个请求中返回了两个数据。
因此,我们实现了通过一个请求/响应从两个不同的数据库表中获取数据。
关注七爪网,获取更多APP/小程序/网站源码资源!
| 留言与评论(共有 0 条评论) “” |