Фильтр наиболее просматриваемых и используемых объектов за предыдущую неделю

Я хочу фильтровать наиболее просматриваемые и используемые объекты за предыдущую неделю (последние семь дней) в моем проекте.

Модели

class Banner(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=150 , unique=True)
    description = RichTextField(blank=True, null=True)
    category = models.CharField(max_length=200)
    tag = models.CharField(max_length=200)
    image = models.ImageField(upload_to='banner-images/')
    updated = models.DateField(auto_now=True)
    created = models.DateField(auto_now_add = True)
    banner_users = models.ManyToManyField(User, related_name='banner_users', blank=True)
    slug = models.SlugField(unique=True, max_length=100)
    hit_count_generic = GenericRelation(HitCount, object_id_field='object_pk', related_query_name='hit_count_generic_relation')
  
    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        return super(Banner, self).save(*args, **kwargs)

Я использовал пакет hit-count для механизма подсчета просмотров и использовал banner_users в модели выше для отслеживания использования баннера

Виды

def discoverPage(request):
    context = {}
    q = request.GET.get('q') if request.GET.get('q') != None else ''
    searchbar_word = request.GET.get('q')
    banners = Banner.objects.filter(
        Q(name__icontains=q) | 
        Q(user__username__icontains=q) |
        Q(user__full_name__icontains=q) |
        Q(description__icontains=q) 
    )
    most_viewed = Banner.objects.order_by('-hit_count_generic__hits')[:6]
    most_used = Banner.objects.order_by('banner_users')[:6]
    context = {'banners':banners, 'most_viewed':most_viewed, 'most_used':most_used, 'searchbar_word':searchbar_word}
    return render(request, 'discover-banner.html', context)
Вернуться на верх