from django.contrib import admin from .models import Song 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 @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']