from django.contrib import admin from .models import Song, Artist, MusicAlbum, StorageMedium from django import forms class SongAdminForm(forms.ModelForm): class Meta: model = Song fields = ['song_title', 'release_year', 'duration'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Dodaj placeholder do pola duration self.fields['duration'].widget.attrs['placeholder'] = 'HH:MM:SS' # Dodaj placeholder do pola rok self.fields['release_year'].widget.attrs['placeholder'] = 'Wprowadź rok wydania' def clean_duration(self): duration = self.cleaned_data['duration'] # Sprawdzamy, czy duration ma poprawny format (HH:MM:SS) if duration.total_seconds() < 0: raise forms.ValidationError('Niewłaściwy format czasu. Użyj wartości nieujemnej.') # Sprawdzamy, czy duration nie przekracza 01:59:59 if duration.total_seconds() > 7199: raise forms.ValidationError('Maksymalna długość to 1 godzina, 59 minut i 59 sekund.') return duration class ArtistInline(admin.TabularInline): model = Artist.songs.through # To jest model pośredniczący w relacji wiele-do-wielu extra = 1 @admin.register(Song) class SongAdmin(admin.ModelAdmin): form = SongAdminForm list_display = ('song_title', 'release_year', 'duration', 'created_at', 'modified_at') list_filter = ('release_year',) search_fields = ('song_title',) readonly_fields = ['created_at', 'modified_at'] inlines = [ArtistInline] @admin.register(Artist) class ArtistAdmin(admin.ModelAdmin): list_display = ('artist_name',) search_fields = ['artist_name'] filter_horizontal = ('songs',) class StorageMediumInline(admin.StackedInline): model = StorageMedium extra = 1 filter_horizontal = ('songs',) @admin.register(MusicAlbum) class MusicAlbumAdmin(admin.ModelAdmin): search_fields = ['album_title'] inlines = [StorageMediumInline] @admin.register(StorageMedium) class StorageMediumAdmin(admin.ModelAdmin): filter_horizontal = ('songs',) search_fields = ['disc_title'] list_filter = ('albums_title',)