2014-12-02 114 views
0

在Django REST Framework API中,數據庫表記錄列表在API重新啓動或python文件(如模型,序列化程序或視圖)中更改任何代碼之前不會更新。我已經嘗試了交易提交,但沒有奏效。下面是我的看法:沒有在Django REST框架中獲取更新記錄的記錄列表..?

class ServiceViewSet(viewsets.ModelViewSet): 
    #authentication_classes = APIAuthentication, 
    queryset = Service.objects.all() 
    serializer_class = ServiceSerializer 
    def get_queryset(self): 
     queryset = self.queryset 
     parent_id = self.request.QUERY_PARAMS.get('parent_id', None) 
     if parent_id is not None: 
      queryset = queryset.filter(parent_id=parent_id) 
     return queryset 
    # Make Service readable only 
    def update(self, request, *args, **kwargs): 
     return Response(status=status.HTTP_400_BAD_REQUEST)  
    def destroy(self, request, *args, **kwargs): 
     return Response(status=status.HTTP_400_BAD_REQUEST) 

串行看起來是這樣的:

class ServiceSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Service 
     fields = ('id', 'category_name', 'parent_id') 
     read_only_fields = ('category_name', 'parent_id') 

和型號如下:

class Service(models.Model): 
    class Meta: 
     db_table = 'service_category' 
     app_label = 'api' 
    category_name = models.CharField(max_length=100) 
    parent_id = models.IntegerField(default=0) 
    def __unicode__(self): 
     return '{"id":%d,"category_name":"%s"}' %(self.id,self.category_name) 

這個問題是否與此服務,原料藥剩下的只有存在的工作得很好。任何幫助將不勝感激。

回答

2

因爲您正在設置self.queryset(它是一個類屬性)上的查詢集,所以它將被緩存。這就是爲什麼你沒有爲每個請求獲取更新的查詢集,這也是爲什麼Django REST Framework calls .all() on querysets in the default get_queryset。通過在查詢集上調用.all(),它將不再使用緩存的結果,並將強制進行新的評估,這正是您正在尋找的。

class ServiceViewSet(viewsets.ModelViewSet): 
    queryset = Service.objects.all() 

    def get_queryset(self): 
     queryset = self.queryset.all() 
     parent_id = self.request.QUERY_PARAMS.get('parent_id', None) 

     if parent_id is not None: 
      queryset = queryset.filter(parent_id=parent_id) 

     return queryset 
+0

它爲我工作。非常感謝。 – Ritesh 2014-12-04 07:22:08