from django.contrib import admin from inline_actions.admin import InlineActionsModelAdminMixin from radio.admin import BaseSongInline from .models import RadioProfile, SongRequest class FavoriteInline(BaseSongInline): model = RadioProfile.favorites.through verbose_name = 'favorite' verbose_name_plural = 'favorites' class RatingInline(admin.TabularInline): model = RadioProfile.ratings.through verbose_name = 'rating' verbose_name_plural = 'ratings' extra = 0 @admin.register(RadioProfile) class ProfileAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): # Edit Form display readonly_fields = ('created_date', 'modified_date') fieldsets = ( ('Main', { 'fields': ('user',) }), ('Stats', { 'classes': ('collapse',), 'fields': ('created_date', 'modified_date') }) ) can_delete = False verbose_name = 'profile' verbose_name_plural = 'profiles' extra = 0 inlines = [FavoriteInline, RatingInline] class Media: css = { 'all': ('css/remove_inline_object_names.css', ) } @admin.register(SongRequest) class RequestAdmin(admin.ModelAdmin): # Detail List display list_display = ( 'get_user', 'get_game', 'song', 'created_date', 'queued_at', 'played_at' ) search_fields = ['song', 'profile'] # Edit Form display readonly_fields = ( 'modified_date', 'queued_at', 'played_at' ) raw_id_fields = ('song',) verbose_name = 'request' verbose_name_plural = 'requests' extra = 0 def get_queryset(self, request): return super( RequestAdmin, self ).get_queryset(request).select_related('profile__user', 'song__game') def get_user(self, obj): '''Returns the username from the profile.''' return obj.profile.user get_user.admin_order_field = 'profile' get_user.short_description = 'User Name' def get_game(self, obj): '''Returns the game associated with the song.''' return obj.song.game get_game.admin_order_field = 'song__game' get_game.short_description = 'Game'