我已经问了这个问题,但是没有人回答。我会再次问它,因为我很确定这个问题很容易被Django中比我更了解的人(我什么都不知道)解决。我有一个搜索工具。当我使用它时,它会搜索我的五个Django模型,从而向我的REST API发送五个GET请求。令人讨厌的是它在我的控制台中显示五个请求。有没有办法“混合”这五个请求,只显示一个请求?或者,有没有办法在几个模型上做单个请求?请教我。
编辑:执行查询的我的一个视图示例:
class ProjectList(generics.ListCreateAPIView):
serializer_class = ProjectSerializer #My serializer
def get_queryset(self):
queryset = Project.objects.filter(user=self.request.user)
query = self.request.QUERY_PARAMS.get('query', None)
# Perf enhancements :
queryset = queryset.prefetch_related('user', 'tasks')
# ---
if query is not None:
queryset = queryset.filter(
Q(name__icontains=query) |
Q(created_on__icontains=query)).order_by('name')
return queryset
def pre_save(self, obj):
obj.user = self.request.user #This links the project to an user
#Don't think it's useful here but anyway
我还有四个查询视图,每个模型一个。他们都是这样的,所以我认为发布它们并不重要。
这些查询是在我的javascript文件中进行的(我正在使用angularjs),如下所示:
this.doSearch = function(query) {
if (query.length > 2) {
this.searchengine.projects = $resource('/api/projects').get({query: query});
this.searchengine.tasks = $resource('/api/tasks').get({query: query});
this.searchengine.comments = $resource('/api/comments').get({query: query});
}
}
答案 0 :(得分:0)
您可以为搜索创建一个新的端点,返回多种类型的对象:
class SearchView(APIView):
def get(self, request, format=None):
data = []
queryset = Project.objects.filter(user=request.user)
query = self.request.QUERY_PARAMS.get('query', None)
queryset = queryset.filter(
Q(name__icontains=query) |
Q(created_on__icontains=query)).order_by('name')
serializer = ProjectSerializer(queryset, many=True)
data.extend(serializer.data)
#do the same for other types of objects
return Response(data)