Использование супер в Django и кеширование - PullRequest
0 голосов
/ 03 декабря 2018

Мне было поручено создать систему чахинга в Джанго.Я слежу за "Освоение веб-разработки 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 и, к сожалению, у меня никогда не было больших шансов на его использование.

...