Files
MarietjeDjango/marietje/songs/admin.py
2020-06-15 17:52:20 +02:00

49 lines
1.4 KiB
Python

from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from .models import ReportNote, Song
class ReportNoteInline(admin.StackedInline):
model = ReportNote
extra = 0
autocomplete_fields = ('user',)
@admin.register(Song)
class SongAdmin(admin.ModelAdmin):
list_display = ('artist', 'title', 'user_name', 'reports')
search_fields = ('artist', 'title', 'user__name')
inlines = [ReportNoteInline]
autocomplete_fields = ('user',)
@staticmethod
def reports(song):
return ReportNote.objects.filter(song=song).count()
@staticmethod
def user_name(song):
try:
return song.user.name
except AttributeError:
return '<unknown>'
@staticmethod
def get_readonly_fields(request, obj=None):
return [] if request.user.is_superuser else ['hash']
@admin.register(ReportNote)
class ReportNoteAdmin(admin.ModelAdmin):
exclude = ('song',)
list_display = ('song', 'note', 'user')
search_fields = ('song__artist', 'song__title', 'user__name')
autocomplete_fields = ('user',)
readonly_fields = ('song_link',)
@staticmethod
def song_link(note):
url = reverse("admin:songs_song_change", args=(note.song.id,))
return format_html("<a href='{url}'>{song}</a>", url=url, song=note.song)
song_link.short_description = "Song link"