diff --git a/opentech/apply/activity/models.py b/opentech/apply/activity/models.py index ea3e7101324996b16082ff1d3694b1d6b388ec6c..159bd219cf8270dd8e977cd087e633050363973d 100644 --- a/opentech/apply/activity/models.py +++ b/opentech/apply/activity/models.py @@ -41,6 +41,9 @@ class BaseActivityQuerySet(models.QuerySet): def visible_to(self, user): return self.filter(visibility__in=self.model.visibility_for(user)) + def newer(self, activity): + return self.filter(timestamp__gt=activity.timestamp) + class ActivityQuerySet(BaseActivityQuerySet): def comments(self): diff --git a/opentech/apply/funds/api_views.py b/opentech/apply/funds/api_views.py index ece53fb38815dfe6cac8a8578e7adc86c99cba00..cb989821e468641c770e06f16299d216132d7dd6 100644 --- a/opentech/apply/funds/api_views.py +++ b/opentech/apply/funds/api_views.py @@ -108,13 +108,22 @@ class RoundLabList(generics.ListAPIView): pagination_class = StandardResultsSetPagination +class NewerThanFilter(filters.ModelChoiceFilter): + def filter(self, qs, value): + if not value: + return qs + + return qs.newer(value) + + class CommentFilter(filters.FilterSet): since = filters.DateTimeFilter(field_name="timestamp", lookup_expr='gte') before = filters.DateTimeFilter(field_name="timestamp", lookup_expr='lte') + newer = NewerThanFilter(queryset=Activity.comments.all()) class Meta: model = Activity - fields = ['submission', 'visibility', 'since', 'before'] + fields = ['submission', 'visibility', 'since', 'before', 'newer'] class CommentList(generics.ListAPIView): @@ -138,7 +147,7 @@ class CommentListCreate(generics.ListCreateAPIView): permissions.IsAuthenticated, IsApplyStaffUser, ) filter_backends = (filters.DjangoFilterBackend,) - filter_fields = ('visibility',) + filter_class = CommentFilter pagination_class = StandardResultsSetPagination def get_queryset(self):