我目前拥有一个Restaurant
模型,其中包含相关模型Review
和Comment
。用户可以评论和评论餐厅。
我试图在Django中创建权重逻辑,其中我显示了权重最大的前三家餐厅。
目前的逻辑如下:
restaurants = Restaurant.objects.all()
top_3 = restaurants.annotate(weight=(Count('review')) + F('views') + (Count('comment'))).order_by('-weight')
如何更新此逻辑,以便只考虑过去7天的评论和评论?
修改
Review和Comment模型都有一个用于跟踪创建对象的字段:
pub_date = models.DateTimeField(default=timezone.now, blank=True)
答案 0 :(得分:3)
我希望这会有所帮助:
dictionary.h
import datetime
from django.db.models import Q
from django.utils import timezone
week_ago = timezone.now() - datetime.timedelta(days=7)
top_3 = Restaurant.objects.filter(
Q(review__isnull=True) | Q(review__pub_date__gt=week_ago),
Q(comment__isnull=True) | Q(comment__pub_date__gt=week_ago),
).annotate(weight=...).order_by('-weight')[:3]
和review__isnull=True
不会过滤掉没有comment__isnull=True
和restaurants
的{{1}}。如果您不关心reviews
,可以使用此过滤器:
comments
文档