Django Rest框架多个数据库

who*_*rth 4 django django-rest-framework

我有一个视图,该视图用于GET和POST到不是默认数据库的数据库。

class DeployResourceFilterView(generics.ListAPIView):
    serializer_class = ResourceSerializer

    def get(self, request, format=None):
        resname = self.request.GET.get('name')
        queryset = Resmst.objects.db_manager('Admiral').filter(resmst_name=resname)
        serializer = ResourceSerializer(queryset)
        if queryset:
            return Response(serializer.data)
        else:
            raise Http404

    def post(self, request, format=None):
        serializer = ResourceSerializer(data=request.DATA, many=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)

GET可以正常工作,但在POST上,它总是会抱怨表不存在而不断失败。我的假设是这样做的原因是因为它试图使用默认数据库,而不是我定义为辅助数据库的“海军上将”数据库。如何分配POST以使用特定数据库而不是默认数据库?

Car*_*lla 5

请参阅以下指向文档的链接:https : //docs.djangoproject.com/en/1.7/topics/db/multi-db/#selecting-a-database-for-save

您可以指定要保存到的数据库,只需将其作为参数传递即可:

my_object.save(using='database-name')
Run Code Online (Sandbox Code Playgroud)

您的情况是:

serializer.save(using='Admiral')
Run Code Online (Sandbox Code Playgroud)

您还应该queryset像这样使用它:

queryset = Resmst.objects.using('Admiral').filter(resmst_name=resname)
Run Code Online (Sandbox Code Playgroud)

由于它是一个查询集而不是一个需要db_manager创建对象的命令。