2014-09-05 108 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