# Generated by Django 6.0.6 on 2026-07-12 15:22 import django.db.models.deletion import uuid from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('club', '0008_alter_clubmembership_unique_together_and_more'), ('members', '0002_alter_familymembership_unique_together_and_more'), ('teams', '0001_initial'), ] operations = [ migrations.CreateModel( name='Location', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('name', models.CharField(max_length=255, verbose_name='name')), ('address', models.CharField(max_length=255, verbose_name='address')), ('city', models.CharField(max_length=255, verbose_name='city')), ('zip_code', models.CharField(max_length=255, verbose_name='zip code')), ('country', models.CharField(max_length=255, verbose_name='country')), ('club', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='club.club')), ], options={ 'verbose_name': 'location', 'verbose_name_plural': 'locations', 'ordering': ['name'], }, ), migrations.CreateModel( name='Opponent', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('name', models.CharField(max_length=255, verbose_name='name')), ('logo', models.ImageField(blank=True, upload_to='opponents', verbose_name='logo')), ('club', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='club.club')), ], options={ 'verbose_name': 'opponent', 'verbose_name_plural': 'opponents', 'ordering': ['name'], }, ), migrations.CreateModel( name='Event', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('kind', models.CharField(choices=[('training', 'training'), ('match', 'match'), ('tournament', 'tournament'), ('meeting', 'meeting'), ('social', 'social'), ('other', 'other')], default='other', max_length=10, verbose_name='kind')), ('title', models.CharField(max_length=255, verbose_name='title')), ('start', models.DateTimeField(verbose_name='start')), ('end', models.DateTimeField(blank=True, null=True, verbose_name='end')), ('gathering', models.DateTimeField(blank=True, null=True, verbose_name='gathering')), ('deadline', models.DateTimeField(blank=True, null=True, verbose_name='deadline')), ('club', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='club.club')), ('team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='events', to='teams.team', verbose_name='team')), ('location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='events', to='events.location', verbose_name='location')), ('opponent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='events', to='events.opponent', verbose_name='opponent')), ], options={ 'verbose_name': 'event', 'verbose_name_plural': 'events', 'ordering': ['-start'], }, ), migrations.CreateModel( name='Attendance', fields=[ ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)), ('status', models.CharField(choices=[('present', 'present'), ('absent', 'absent'), ('excused', 'excused'), ('selected', 'selected'), ('not_selected', 'not selected'), ('maybe', 'maybe'), ('no_response', 'no response')], default='no_response', max_length=20, verbose_name='status')), ('note', models.TextField(blank=True, verbose_name='note')), ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendances', to='members.member', verbose_name='member')), ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attendances', to='events.event', verbose_name='event')), ], options={ 'verbose_name': 'attendance', 'verbose_name_plural': 'attendances', 'ordering': ['event', 'member__last_name', 'member__first_name'], 'constraints': [models.UniqueConstraint(fields=('event', 'member'), name='unique_attendance_per_event_per_member')], }, ), ]