Django запрос - как отфильтровать сумму по дате?

Я борюсь с кверисетом в представлении Django. В основном, у меня есть три модели: User, ActivityLog, & ActivityCategory.

Пользователь - встроенный.

ActivityLog выглядит следующим образом:

class ActivityLog(models.Model):
    activity_datetime = models.DateTimeField(default=timezone.now)
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, related_name='activity_user')
    activity_category = models.ForeignKey(ActivityCategory, on_delete=models.CASCADE, null=True, related_name='activity_cat')
    activity_description = models.CharField(max_length=100, default="Misc Activity")

Категория деятельности:

class ActivityCategory(models.Model):
    activity_name = models.CharField(max_length=40)
    activity_description = models.CharField(max_length=150)
    pts = models.IntegerField()

Моя цель - вернуть совокупность всех баллов, накопленных пользователем за участие в деятельности в журнале. Каждый журнал ссылается на ActivityType, разные типы стоят разные баллы.

Я добился этого с помощью следующего запроса в представлении:

class UserScoresAPIView(generics.ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserScoresSerializer

    def get_queryset(self):
        queryset = User.objects.annotate(total_pts=Coalesce(Sum('activity_user__activity_category__pts'), 0)).order_by('-total_pts')
        return queryset

Теперь мне нужно добавить к этому запросу и ограничить его на основе даты активности. Я хочу в основном добавить фильтр:

.filter('activity_user__activity_datetime__gte=datetime.date(2020,10,1)') 

Как я могу добавить это в мой текущий запрос для достижения этой цели? Я пытался сделать это здесь:

queryset = User.objects.annotate(total_pts=Coalesce(Sum('activity_user__activity_category__pts').filter('activity_user__activity_datetime__gte=datetime.date(2020,10,1)') , 0)).order_by('-total_pts')

Но это произошло бы после Sum и не было бы полезным (или работающим...), поэтому я попытался создать цепочку, где она вытягивает объекты User

User.objects.filter('activity_user__activity_datetime__gte=datetime.date(2020,10,1)').annotate(total_pts=Coalesce(Sum('activity_user__activity_category__pts'), 0)).order_by('-total_pts')

Но теперь я получаю ошибку при попытке разобрать мой запрос:

ValueError: too many values to unpack (expected 2)

Я запутался в том, куда двигаться дальше, и буду признателен за любые рекомендации.

Спасибо.

BCBB

Аааааа, я так сосредоточился на том, как соединить их вместе, что подумал, что делаю это неправильно, но на самом деле я просто не уверен, что заставило меня заключить фильтр в кавычки...

Arrrrg. Сейчас работает как указано в последнем списке без кавычек...

User.objects.filter(activity_user__activity_datetime__gte=datetime.date(2020,10,1)).annotate(total_pts=Coalesce(Sum('activity_user__activity_category__pts'), 0)).order_by('-total_pts')
Вернуться на верх