在Django和缓存中使用super

时间:2018-12-03 18:16:29

标签: python-3.x super django-cache

我的任务是在Django中创建一个缓存系统。我正在追踪"Mastering Django Web Development: Low-level Caching | packtpub.com"。我花了一些时间来了解这段代码中的“ super”行,但是总而言之,至少在此示例中,我将其理解为一种访问父级/祖先级的方式

代码如下:

class Report(models.Model):
    timestamp = models.DateTimeField()
    client = models.CharField(max_length=80)
    group = models.CharField(max_length=80)

    @property
    def failed_history(self, deltadays=-7):
        from myapp.views.helpers import get_time_window

        smin, smax = get_time_window(self.timestamp, deltadays)
        smin = smin.isoformat()
        smax = smax.isoformat()

        mycachekey = "failed_history_" + smin + "_" + smax + "_" + self.client + "_" + self.group
        obj = cache.get(mycachekey)

        if not obj:
            r = Report.objects.filter(client__iexact=self.client).filter(group__iexact=self.group).filter(timestamp__gte=sts_min).filter(timestamp__lte=sts_max).exclude(status__icontains="failed").order_by('timestamp', 'client') # !! Changed from status__icontains="succeeded"
            cache.set(mycachekey, len(r), deltadays)

        return obj 

当然,如果None不存在,这只是返回obj,这是不希望的。

根据"Mastering Django Web Development: Low-level Caching | packtpub.com"教程,在那里使用的类使用DetailView(来自django.view.generic.detail)父类。我想做一些非常相似的事情,以便可以以某种方式介绍这样的一行:

obj = super(Report, self).get_object(queryset)

问题是看来我不能简单地将models.Model换成DetailView,那么我该如何做呢?我有些困惑,主要是因为到目前为止,我在python中使用super的经验几乎为零,不幸的是从来没有太多使用它的机会。

0 个答案:

没有答案