🆕 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
57 lines
3.2 KiB
Python
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'],
|
|
},
|
|
),
|
|
]
|