Python 带有多个表的Django注释
鉴于模型:Python 带有多个表的Django注释,python,django,django-models,Python,Django,Django Models,鉴于模型: 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.CharF
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和MemberTitle积分组合最多的前五名会员。我还希望查询返回给定日期内成员的所有MemberAction行。你知道怎么做吗
我得到了下面的代码,但为points\u action
返回的数字不正确。奇怪的是,当我删除注释
调用points\u 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)