【问题标题】:Problems with cache queryset django rest framework缓存查询集 django rest 框架的问题
【发布时间】:2017-11-24 19:29:45
【问题描述】:

大家好,我一直在尝试让每次在 API 中使用 REST 服务时都咨询这个查询,但只有在它第一次从数据库中获取数据并且当数据发生变化时服务才会带来缓存存储数据

我的代码: urls.py

router.register(r'cron-log',views.CronLogViewSet, base_name='cron-log')

Views.py - 我的视图集类

class CronLogViewSet(viewsets.ModelViewSet):
queryset = Cron_log.objects.all().order_by('-id').values()[:5:1]
serializer_class = CronLogSerializer

Models.py 我来自 Cron_log 的模型类

class Cron_log(models.Model):
log = models.CharField(max_length=40)
time = models.CharField(max_length=40)
def as_dict(self):
    return {'log':self.log,'time':self.time}

Serializer.py 序列化类

class CronLogSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
    model = Cron_log
    fields = ('log','time')

我在查询集之前尝试了 for ,使用 list(query_set) 但问题仍然存在,谢谢!为您提供帮助

【问题讨论】:

    标签: python django rest django-rest-framework


    【解决方案1】:

    QuerySet 没有更新有几个原因。 1. 使用使用step 参数的切片对其进行评估(step 参数是[:5:1] 中的1(这是多余的,因为 1 是默认值 - 除非您想触发评估)) . 2. 它只在类主体定义中被评估一次,它不会在每次初始化视图集实例时更新。有关切片的更多信息,请参阅when querysets are evaluated 上的 Django 文档部分。

    如果您希望视图集始终返回限制为按 id 降序排列的前 5 个对象的更新查询集,一种选择是将限制切片放在返回限制为前 5 个的查询集的 get_queryset 实例方法中结果。

    class CronLogViewSet(viewsets.ModelViewSet):
        queryset = Cron_log.objects.all().order_by('-id')
        serializer_class = CronLogSerializer
    
        def get_queryset(self):
            queryset = super(CronLogViewSet, self).get_queryset()
            return queryset.values()[:5]
    

    有关更多信息,请参阅 Django Rest Framework 文档中有关 filtering 的部分,更具体地说,请参阅 views.GenericAPIView.get_queryset 的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2017-03-12
      • 2014-09-19
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      相关资源
      最近更新 更多