from django.contrib import admin from .models import Category, CTF, CTF_flags admin.site.register(Category) @admin.register(CTF_flags) class ctf_flags(admin.ModelAdmin): #list display list_display = ['user', 'ctf', 'flag_date'] #list Filter list_filter = ('ctf__category', 'ctf', 'user','flag_date') # search list search_fields = ['ctf__category__name', 'ctf__name', 'user__username'] def get_queryset(self, request): qs = super().get_queryset(request) if request.user.is_superuser: return qs groups = list(request.user.groups.values_list('name', flat=True)) return qs.filter(event__name__in=groups) def has_view_permission(self, request, obj=None): if request.user.is_superuser: return True if obj is not None: return request.user.groups.filter(name=obj.event.name).exists() return super().has_view_permission(request, obj) def has_change_permission(self, request, obj=None): if request.user.is_superuser: return True if obj is not None: return request.user.groups.filter(name=obj.event.name).exists() return super().has_change_permission(request, obj) def has_delete_permission(self, request, obj=None): if request.user.is_superuser: return True if obj is not None: return request.user.groups.filter(name=obj.event.name).exists() return super().has_delete_permission(request, obj) @admin.register(CTF) class ctf(admin.ModelAdmin): #list display list_display = ['name', 'event', 'category', 'points'] #list Filter list_filter = ('category', 'event') # search list search_fields = ['category__name', 'name', 'author__username'] def get_queryset(self, request): qs = super().get_queryset(request) if request.user.is_superuser: return qs groups = list(request.user.groups.values_list('name', flat=True)) return qs.filter(event__name__in=groups) def has_view_permission(self, request, obj=None): if request.user.is_superuser: return True if obj is not None: return request.user.groups.filter(name=obj.event.name).exists() return super().has_view_permission(request, obj) def has_change_permission(self, request, obj=None): if request.user.is_superuser: return True if obj is not None: return request.user.groups.filter(name=obj.event.name).exists() return super().has_change_permission(request, obj)