from typing import Optional from django.contrib import admin from django.contrib.auth import get_user_model from .models import Queue, Playlist, PlaylistSong, QueueCommand, QueueLogEntry, UserQueue from marietje.admin import UserAdmin as BaseUserAdmin from django.utils.translation import gettext_lazy as _ from .services import get_queue_for_user admin.site.register(Playlist) User = get_user_model() @admin.register(Queue) class OrderAdmin(admin.ModelAdmin): list_display = ("name", "playlist", "random_playlist") @admin.register(PlaylistSong) class PlaylistSongAdmin(admin.ModelAdmin): list_display = ("playlist", "song", "user", "state", "played_at") list_display_links = ("song",) list_filter = ("playlist", "state", "user") search_fields = ("song__title", "song__artist", "user__name") autocomplete_fields = ("user",) readonly_fields = ("song",) admin.site.register(QueueCommand) @admin.register(QueueLogEntry) class QueueLogEntryAdmin(admin.ModelAdmin): """Admin for log entries.""" list_display = [ "timestamp", "queue", "action", "user", "description", ] list_filter = [ "queue", "action", ("timestamp", admin.DateFieldListFilter), ] def has_delete_permission(self, request, obj=None): """Disable delete permission.""" return False def has_add_permission(self, request): """Disable add permission.""" return False def has_change_permission(self, request, obj=None): """Disable change permission.""" return False class UserQueueInline(admin.StackedInline): model = UserQueue fields = ("queue",) class UserAdmin(BaseUserAdmin): fieldsets = ( (None, {"fields": ("username", "password")}), (_("Personal info"), {"fields": ("name", "email")}), (_("Permissions"), {"fields": ("is_active", "is_staff", "is_superuser", "groups", "user_permissions")}), (_("Important dates"), {"fields": ("last_login", "date_joined")}), (_("Activation"), {"fields": ("activation_token", "reset_token")}), ) list_display = ("username", "email", "name", "date_joined", "last_login", "queue__queue", "is_staff") inlines = (UserQueueInline,) def queue__queue(self, obj: User) -> Optional[Queue]: """Retrieve the Queue for a User.""" return get_queue_for_user(obj) queue__queue.short_description = "queue" admin.site.unregister(User) admin.site.register(User, UserAdmin)