from django.contrib import admin from .models import Song, Artist, MusicAlbum 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_release_year(self): release_year = self.cleaned_data['release_year'] # Sprawdź, czy rok wydania zawiera dokładnie cztery cyfry if release_year and (len(str(release_year)) != 4 or not str(release_year).isdigit()): raise forms.ValidationError('Rok wydania musi składać się z dokładnie czterech cyfr.') # Sprawdź, czy rok wydania nie jest większy niż rok utworzenia if release_year: created_at_year = self.instance.created_at.year if self.instance and self.instance.created_at else timezone.now().year if int(release_year) > created_at_year: raise forms.ValidationError("Rok wydania nie może być większy niż rok utworzenia.") return release_year 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',) @admin.register(MusicAlbum) class MusicAlbumAdmin(admin.ModelAdmin): # form = MusicAlbumAdminForm list_display = ('album_title', 'disc_number', 'total_disc') search_fields = ['album_title'] filter_horizontal = ('songs',)