import os from django.core.management.base import BaseCommand from django.contrib.auth import get_user_model User = get_user_model() class Command(BaseCommand): help = "Erstellt einen initialen Admin-Benutzer (Superuser) sowie Basis-Qualifikationen für das Portal." def add_arguments(self, parser): parser.add_argument('--username', type=str, default=os.getenv('ADMIN_USERNAME', 'admin'), help='Benutzername für den Admin') parser.add_argument('--email', type=str, default=os.getenv('ADMIN_EMAIL', 'admin@local.host'), help='E-Mail-Adresse für den Admin') parser.add_argument('--password', type=str, default=os.getenv('ADMIN_PASSWORD', 'adminpassword'), help='Passwort für den Admin') def handle(self, *args, **options): username = options['username'] or os.getenv('ADMIN_USERNAME', 'admin') email = options['email'] or os.getenv('ADMIN_EMAIL', 'admin@local.host') password = options['password'] or os.getenv('ADMIN_PASSWORD', 'adminpassword') # 1. Admin User user, created = User.objects.get_or_create( username=username, defaults={'email': email} ) if created: user.set_password(password) user.is_superuser = True user.is_staff = True user.is_admin_user = True user.is_approved = True user.is_email_verified = True user.is_active = True user.save() self.stdout.write(self.style.SUCCESS(f"✅ Initialer Admin '{username}' ({email}) wurde erstellt! Passwort: {password}")) else: changed = False if not user.is_superuser or not user.is_admin_user or not user.is_approved or not user.is_active: user.is_superuser = True user.is_staff = True user.is_admin_user = True user.is_approved = True user.is_active = True changed = True if os.getenv('ADMIN_PASSWORD'): user.set_password(password) changed = True if changed: user.save() self.stdout.write(self.style.SUCCESS(f"✅ Admin-Rechte für bestehenden Benutzer '{username}' wurden aktualisiert.")) else: self.stdout.write(self.style.SUCCESS(f"ℹ️ Admin-Benutzer '{username}' existiert bereits.")) # 2. Initial Base Skills try: from apps.events.models import Skill Skill.objects.get_or_create( name="Ersthelfer", defaults={'description': 'Gültiger Erste-Hilfe-Schein', 'color': '#ef4444'} ) Skill.objects.get_or_create( name="Bar-Erfahrung", defaults={'description': 'Erfahrung an der Zapfanlage', 'color': '#3b82f6'} ) Skill.objects.get_or_create( name="Führerschein B", defaults={'description': 'PKW / Transporter fahren', 'color': '#10b981'} ) except Exception as e: self.stderr.write(self.style.WARNING(f"Hinweis zu Skills: {e}"))