2014-09-05 125 views
1

我有一个观点,我正在使用GET和POST到一个不是默认数据库的数据库。django rest框架多个数据库

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) 

GET工作得很好,但在POST上它不断地抱怨表不存在。我的假设是,其原因是因为它试图使用默认数据库,而不是我已经定义为我的辅助数据库的'Admiral'。如何分配POST以使用特定数据库而不是默认值?

回答

2

请参阅此链接到文档:https://docs.djangoproject.com/en/1.7/topics/db/multi-db/#selecting-a-database-for-save

您可以指定要保存到数据库中,只是把它作为一个参数:

my_object.save(using='database-name') 

你的情况,那就是:

serializer.save(using='Admiral') 

你也应该用它在你的queryset这样的:

queryset = Resmst.objects.using('Admiral').filter(resmst_name=resname) 

既然它是一个查询集,而不是一个需要db_manager作为创建对象的命令。

+0

感谢您的这一点,但它似乎仍然强制默认数据库不知道为什么。 – whoisearth 2014-09-06 23:55:39

+0

我用Django-Database-Routers解决了这个问题。 [Django - 使用路由器](https://docs.djangoproject.com/en/1.11/topics/db/multi-db/#using-routers) – michaell 2017-06-02 09:12:22