鉴于模型:
class Member(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
class MemberAction(models.Model):
member = models.ForeignKey(Member, on_delete=models.CASCADE)
action = models.CharField(max_length=200)
datetime = models.DateTimeField()
points = models.IntegerField()
class MemberMention(models.Model):
member = models.ForeignKey(Member, on_delete=models.CASCADE)
date = models.DateTimeField()
points = models.IntegerField()
我想在给定的一周内获得MemberAction和MemberAttention积分组合最多的前五名成员。我还希望查询返回给定日期内成员的所有MemberAction行。你知道怎么做吗?你知道吗
我得到了下面的代码,但是为points_action
返回的数字不正确。奇怪的是,当我删除annotate
对points_news
的调用时,它工作正常。你知道吗
def index(request):
today = timezone.now()
week_ago = today - timedelta(7)
ma_w_dates = MemberAction.objects.filter(datetime__date__gte=week_ago,datetime__date__lte=today)
mention_pts = Sum('membermention__points', filter=Q(membermention__date__date__gte=week_ago,membermention__date__date__lte=today))
action_pts = Sum('memberaction__points', filter=Q(memberaction__datetime__date__gte=week_ago,memberaction__datetime__date__lte=today))
members = Member.objects.annotate(points_actions=action_pts).annotate(points_news=mention_pts).order_by('-points_actions').prefetch_related(Prefetch('memberaction_set', queryset=ma_w_dates))[:5]
context = {'members':members}
return render(request, 'data/index__text.html', context)
目前没有回答
相关问题 更多 >
编程相关推荐