2014-12-02 86 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