Skip to content
Snippets Groups Projects
Verified Commit 9d565fb7 authored by Ernesto Rico Schmidt's avatar Ernesto Rico Schmidt
Browse files

feat: add is_writable show filter

parent 38bc37e5
No related branches found
No related tags found
No related merge requests found
Pipeline #7411 passed
...@@ -5,6 +5,7 @@ from django_filters import rest_framework as filters ...@@ -5,6 +5,7 @@ from django_filters import rest_framework as filters
from django_filters import widgets from django_filters import widgets
from django import forms from django import forms
from django.conf import settings
from django.db.models import Exists, OuterRef, Q, QuerySet from django.db.models import Exists, OuterRef, Q, QuerySet
from django.utils import timezone from django.utils import timezone
from program import models from program import models
...@@ -80,6 +81,10 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet): ...@@ -80,6 +81,10 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
"or past or upcoming shows if false." "or past or upcoming shows if false."
), ),
) )
is_writable = filters.BooleanFilter(
method="filter_writable",
help_text="Return only shows writable by the requesting authenticated user.",
)
is_public = filters.BooleanFilter( is_public = filters.BooleanFilter(
field_name="is_public", field_name="is_public",
help_text="Return only shows that are public/non-public.", help_text="Return only shows that are public/non-public.",
...@@ -145,6 +150,20 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet): ...@@ -145,6 +150,20 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
else: else:
return queryset.exclude(id__in=show_ids, is_active=True) return queryset.exclude(id__in=show_ids, is_active=True)
def filter_writable(self, queryset: QuerySet, _: str, value: bool) -> QuerySet:
user = self.request.user if self.request.user.is_authenticated else None
user_is_privileged = (
user.groups.filter(name=settings.PRIVILEGED_GROUP).exists() if user else False
)
if value and user_is_privileged:
return queryset
elif value and user:
return queryset.filter(owners=user)
else:
return models.Show.objects.none()
class Meta: class Meta:
model = models.Show model = models.Show
fields = [ fields = [
...@@ -154,6 +173,7 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet): ...@@ -154,6 +173,7 @@ class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
"host_ids", "host_ids",
"is_active", "is_active",
"is_public", "is_public",
"is_writable",
"language_ids", "language_ids",
"music_focus_ids", "music_focus_ids",
"music_focus_slug", "music_focus_slug",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment