【问题标题】:List of records not fetching updated records in Django REST framework..?在 Django REST 框架中未获取更新记录的记录列表..?
【发布时间】:2015-01-30 07:25:44
【问题描述】:

在 Django REST Framework API 中,数据库表记录列表不会更新,直到 API 重新启动或 python 文件(如模型、序列化程序或视图)中的任何代码更改。我已经尝试过事务提交,但没有奏效。以下是我的看法:

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)

此问题仅在此服务中出现,其余 API 工作正常。任何帮助将不胜感激。

【问题讨论】:

    标签: django python-2.7 django-rest-framework


    【解决方案1】:

    因为您在self.queryset 上设置查询集,这是一个类属性,所以它正在被缓存。这就是为什么您没有为每个请求获取更新的查询集的原因,这也是 Django REST Framework calls .all() on querysets in the default get_queryset 的原因。通过在查询集上调用.all(),它将不再使用缓存的结果,并将强制执行新的评估,这正是您要寻找的。​​p>

    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
    

    【讨论】:

    • 哇 - 我已经为此苦苦挣扎了好几天 - 谢谢!
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多