Files
SysAdmin Agent 3ca2706e5d Phase 0: forms.py, admin.py und views.py in Domain-Packages aufteilen
- forms.py → forms/ Package (8 Domänen: destinataere, land, finanzen,
  foerderung, dokumente, veranstaltung, system, geschichte)
- admin.py → admin/ Package (7 Domänen, alle 22 @admin.register dekoriert)
- views.py (8845 Zeilen) → views/ Package (10 Domänen: dashboard, destinataere,
  land, paechter, finanzen, foerderung, dokumente, unterstuetzungen,
  veranstaltung, geschichte, system)
- __init__.py in jedem Package re-exportiert alle Symbole für Rückwärtskompatibilität
- urls.py bleibt unverändert (funktioniert durch Re-Exports)
- Django system check: 0 Fehler, alle URL-Auflösungen funktionieren

Keine funktionalen Änderungen – reine Strukturverbesserung für Vision 2026.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 09:55:15 +00:00

108 lines
3.7 KiB
Python

from django import forms
from ..models import GeschichteBild, GeschichteSeite
class GeschichteSeiteForm(forms.ModelForm):
"""Form for creating and editing history pages"""
class Meta:
from ..models import GeschichteSeite
model = GeschichteSeite
fields = ['titel', 'slug', 'inhalt', 'ist_veroeffentlicht', 'sortierung']
widgets = {
'titel': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'z.B. Gründung der Stiftung'
}),
'slug': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'z.B. gruendung-der-stiftung'
}),
'inhalt': forms.Textarea(attrs={
'class': 'form-control rich-text-editor',
'rows': 20,
'placeholder': 'Schreiben Sie hier den Inhalt der Geschichtsseite...'
}),
'ist_veroeffentlicht': forms.CheckboxInput(attrs={
'class': 'form-check-input'
}),
'sortierung': forms.NumberInput(attrs={
'class': 'form-control',
'min': 0
})
}
help_texts = {
'slug': 'URL-freundliche Version des Titels (nur Buchstaben, Zahlen und Bindestriche)',
'inhalt': 'Unterstützt Rich-Text-Formatierung, Bilder und Videos',
'sortierung': 'Niedrigere Zahlen erscheinen zuerst in der Navigation'
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# Auto-generate slug from title if not provided
if not self.instance.pk:
self.fields['slug'].required = False
def clean_slug(self):
slug = self.cleaned_data.get('slug')
titel = self.cleaned_data.get('titel', '')
if not slug and titel:
# Auto-generate slug from title
from django.utils.text import slugify
slug = slugify(titel)
if not slug:
raise forms.ValidationError('Slug ist erforderlich. Bitte geben Sie einen Titel ein.')
return slug
def clean(self):
cleaned_data = super().clean()
titel = cleaned_data.get('titel', '')
slug = cleaned_data.get('slug', '')
# Auto-generate slug if empty
if titel and not slug:
from django.utils.text import slugify
cleaned_data['slug'] = slugify(titel)
return cleaned_data
class GeschichteBildForm(forms.ModelForm):
"""Form for uploading images to history pages"""
class Meta:
from ..models import GeschichteBild
model = GeschichteBild
fields = ['titel', 'bild', 'beschreibung', 'alt_text', 'sortierung']
widgets = {
'titel': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'z.B. Gründungsurkunde 1895'
}),
'bild': forms.ClearableFileInput(attrs={
'class': 'form-control'
}),
'beschreibung': forms.Textarea(attrs={
'class': 'form-control',
'rows': 3,
'placeholder': 'Beschreibung des Bildes...'
}),
'alt_text': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'Alternativtext für Bildschirmleser'
}),
'sortierung': forms.NumberInput(attrs={
'class': 'form-control',
'min': 0
})
}
help_texts = {
'bild': 'Unterstützte Formate: JPG, PNG, GIF (max. 10MB)',
'alt_text': 'Wichtig für Barrierefreiheit',
'sortierung': 'Reihenfolge in der Bildergalerie'
}