filters.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from django.db.models import Avg, Count
  2. from django_filters import rest_framework as filters
  3. from glitchtip.filters import StartEndRelativeIsoDateTimeRangeFilter
  4. from projects.models import Project
  5. from .models import TransactionGroup
  6. class TransactionGroupFilter(filters.FilterSet):
  7. transaction_created = StartEndRelativeIsoDateTimeRangeFilter(
  8. field_name="transactionevent__created", label="Transaction created",
  9. )
  10. project = filters.ModelMultipleChoiceFilter(queryset=Project.objects.all())
  11. query = filters.CharFilter(
  12. field_name="transaction",
  13. lookup_expr="icontains",
  14. label="Transaction text search",
  15. )
  16. class Meta:
  17. model = TransactionGroup
  18. fields = ["project", "transaction_created"]
  19. def filter_queryset(self, queryset):
  20. queryset = super().filter_queryset(queryset)
  21. environments = self.request.query_params.getlist("environment")
  22. if environments:
  23. queryset = queryset.filter(tags__environment__has_any_keys=environments)
  24. # This annotation must be applied after any related transactionevent filter
  25. queryset = queryset.annotate(
  26. avg_duration=Avg("transactionevent__duration"),
  27. transaction_count=Count("transactionevent"),
  28. )
  29. return queryset