我的任务是在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
的经验几乎为零,不幸的是从来没有太多使用它的机会。