Files
stiftung-management-system/app/stiftung/migrations/0037_add_geschichte_models.py
Jan Remmer Siebels 2961f376c3 Add Geschichte (History) wiki-style feature with reorganized navigation
🆕 NEW FEATURES:
- Wiki-style Geschichte (History) section with rich text editor
- Image upload support for history pages
- Quill.js rich text editor with formatting options
- Slug-based URLs for SEO-friendly history pages
- Image galleries with descriptions and alt-text support

🔧 MODELS:
- GeschichteSeite: Main history pages with rich content
- GeschichteBild: Image attachments for history pages
- Auto-generated slugs, sorting, publishing controls

📝 TEMPLATES:
- geschichte/liste.html: Card-based overview of all history pages
- geschichte/detail.html: Full page view with image gallery
- geschichte/form.html: Rich text editor for creating/editing pages
- geschichte/bild_form.html: Image upload interface

🎨 UI IMPROVEMENTS:
- Reorganized navigation menu into logical groups:
  * Menschen & Finanzen (People & Finance)
  * Immobilien & Land (Real Estate & Land)
  * Verwaltung (Administration)
  * Geschichte (History)
- More compact menu design saving horizontal space
- Better grouping with dropdown headers

🛠️ TECHNICAL:
- Rich text editor with Quill.js integration
- Image upload with validation and optimization
- Permission-based access controls
- Responsive design for all screen sizes
- Proper breadcrumb navigation
- Auto-slug generation from titles
2025-10-02 21:49:12 +02:00

57 lines
3.2 KiB
Python

# Generated by Django 5.0.6 on 2025-10-02 19:48
import django.db.models.deletion
import uuid
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('stiftung', '0036_force_semester_deadlines_update'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='GeschichteSeite',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('titel', models.CharField(max_length=200, verbose_name='Titel')),
('slug', models.SlugField(max_length=200, unique=True, verbose_name='URL-Slug')),
('inhalt', models.TextField(verbose_name='Inhalt')),
('erstellt_am', models.DateTimeField(auto_now_add=True, verbose_name='Erstellt am')),
('aktualisiert_am', models.DateTimeField(auto_now=True, verbose_name='Aktualisiert am')),
('ist_veroeffentlicht', models.BooleanField(default=True, verbose_name='Veröffentlicht')),
('sortierung', models.IntegerField(default=0, verbose_name='Sortierung')),
('aktualisiert_von', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='geschichte_seiten_aktualisiert', to=settings.AUTH_USER_MODEL, verbose_name='Aktualisiert von')),
('erstellt_von', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='geschichte_seiten_erstellt', to=settings.AUTH_USER_MODEL, verbose_name='Erstellt von')),
],
options={
'verbose_name': 'Geschichte Seite',
'verbose_name_plural': 'Geschichte Seiten',
'ordering': ['sortierung', 'titel'],
},
),
migrations.CreateModel(
name='GeschichteBild',
fields=[
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('titel', models.CharField(max_length=200, verbose_name='Bildtitel')),
('bild', models.ImageField(upload_to='geschichte/bilder/%Y/%m/', verbose_name='Bild')),
('beschreibung', models.TextField(blank=True, verbose_name='Beschreibung')),
('alt_text', models.CharField(blank=True, max_length=200, verbose_name='Alt-Text')),
('hochgeladen_am', models.DateTimeField(auto_now_add=True, verbose_name='Hochgeladen am')),
('sortierung', models.IntegerField(default=0, verbose_name='Sortierung')),
('hochgeladen_von', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Hochgeladen von')),
('seite', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='bilder', to='stiftung.geschichteseite', verbose_name='Geschichte Seite')),
],
options={
'verbose_name': 'Geschichte Bild',
'verbose_name_plural': 'Geschichte Bilder',
'ordering': ['sortierung', 'titel'],
},
),
]