Мне было поручено создать систему чахинга в Джанго.Я слежу за "Освоение веб-разработки Django: низкоуровневое кэширование | 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: низкоуровневое кэширование | packtpub.com" используемый там класс использует родительский класс DetailView
(из django.view.generic.detail
).Я хотел бы сделать что-то очень похожее, чтобы я мог как-то ввести строку вроде:
obj = super(Report, self).get_object(queryset)
Проблема в том, что я не могу просто поменять models.Model
на DetailView
,так как же мне это сделать?Я немного сбит с толку, в основном потому, что до сих пор у меня почти нулевой опыт работы с super
в python и, к сожалению, у меня никогда не было больших шансов на его использование.