Фильтр наиболее просматриваемых и используемых объектов за предыдущую неделю
Я хочу фильтровать наиболее просматриваемые и используемые объекты за предыдущую неделю (последние семь дней) в моем проекте.
Модели
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)