diff --git a/boatmovers/__init__.py b/boatmovers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/boatmovers/admin.py b/boatmovers/admin.py new file mode 100644 index 00000000..07ac9e1b --- /dev/null +++ b/boatmovers/admin.py @@ -0,0 +1,36 @@ +from django.contrib import admin +from.models import Athlete, Crew, Race, Result +# Register your models here. + +class AthleteInline(admin.StackedInline): + model = Athlete + +class AthleteAdmin(admin.ModelAdmin): + list_display = ('first_name', 'last_name', 'birth_year') + +class CrewInline(admin.StackedInline): + model = Athlete + +class CrewAdmin(admin.ModelAdmin): + list_display = ('name',) + +class RaceInline(admin.StackedInline): + model = Race + +class RaceAdmin(admin.ModelAdmin): + list_display = ('name',) + +class ResultInline(admin.StackedInline): + model = Result + +class ResultAdmin(admin.ModelAdmin): + list_display = ('race','crew','order') + + + + + +admin.site.register(Athlete, AthleteAdmin) +admin.site.register(Crew, CrewAdmin) +admin.site.register(Race, RaceAdmin) +admin.site.register(Result, ResultAdmin) diff --git a/boatmovers/apps.py b/boatmovers/apps.py new file mode 100644 index 00000000..eb3806d9 --- /dev/null +++ b/boatmovers/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BoatmoversConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'boatmovers' diff --git a/boatmovers/migrations/0001_initial.py b/boatmovers/migrations/0001_initial.py new file mode 100644 index 00000000..f9b5cbb7 --- /dev/null +++ b/boatmovers/migrations/0001_initial.py @@ -0,0 +1,58 @@ +# Generated by Django 3.2.12 on 2022-06-22 17:41 + +import boatmovers.models +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Athlete', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('first_name', models.CharField(max_length=200)), + ('last_name', models.CharField(max_length=200)), + ('club', models.CharField(max_length=200)), + ('trueskill_mu', models.FloatField(default=25.0)), + ('trueskill_sigma', models.FloatField(default=8.333)), + ('birth_year', models.IntegerField(default=1972)), + ], + ), + migrations.CreateModel( + name='Crew', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=200)), + ('athletes', models.ManyToManyField(to='boatmovers.Athlete')), + ], + ), + migrations.CreateModel( + name='Race', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField(default=boatmovers.models.current_day)), + ('crew_size', models.IntegerField(default=1)), + ], + ), + migrations.CreateModel( + name='Result', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('order', models.PositiveIntegerField()), + ('crew', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='boatmovers.crew')), + ('race', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='boatmovers.race')), + ], + ), + migrations.AddField( + model_name='race', + name='resultlist', + field=models.ManyToManyField(through='boatmovers.Result', to='boatmovers.Crew'), + ), + ] diff --git a/boatmovers/migrations/0002_alter_athlete_unique_together.py b/boatmovers/migrations/0002_alter_athlete_unique_together.py new file mode 100644 index 00000000..7572d257 --- /dev/null +++ b/boatmovers/migrations/0002_alter_athlete_unique_together.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.12 on 2022-06-22 17:49 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('boatmovers', '0001_initial'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='athlete', + unique_together={('first_name', 'last_name', 'birth_year')}, + ), + ] diff --git a/boatmovers/migrations/0003_auto_20220622_1753.py b/boatmovers/migrations/0003_auto_20220622_1753.py new file mode 100644 index 00000000..bc367b79 --- /dev/null +++ b/boatmovers/migrations/0003_auto_20220622_1753.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.12 on 2022-06-22 17:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('boatmovers', '0002_alter_athlete_unique_together'), + ] + + operations = [ + migrations.AddField( + model_name='race', + name='name', + field=models.CharField(default='Race1', max_length=200), + preserve_default=False, + ), + migrations.AddField( + model_name='race', + name='resulturl', + field=models.URLField(null=True), + ), + migrations.AlterUniqueTogether( + name='race', + unique_together={('date', 'name')}, + ), + ] diff --git a/boatmovers/migrations/__init__.py b/boatmovers/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/boatmovers/models.py b/boatmovers/models.py new file mode 100644 index 00000000..07dae6cb --- /dev/null +++ b/boatmovers/models.py @@ -0,0 +1,48 @@ +from django.db import models +import datetime +from django.utils import timezone + +def current_day(ttz=None): + if ttz is None: + return (datetime.datetime.now(tz=timezone.utc)).date() + return datetime.datetime.utcnow().astimezone(pytz.timezone(ttz)).date() + +# Create your models here. +class Athlete(models.Model): + first_name = models.CharField(max_length=200) + last_name = models.CharField(max_length=200) + club = models.CharField(max_length=200) + trueskill_mu = models.FloatField(default=25.) + trueskill_sigma = models.FloatField(default=8.333) + birth_year = models.IntegerField(default=1972) + + class Meta: + unique_together = ('first_name','last_name','birth_year') + + def __str__(self): + return u'{f} {l}'.format(f = self.first_name, l=self.last_name) + +class Crew(models.Model): + athletes = models.ManyToManyField(Athlete) + name = models.CharField(max_length=200) + + def __str__(self): + return u'{n}'.format(n=self.name) + +class Race(models.Model): + name = models.CharField(max_length=200) + resulturl = models.URLField(null=True) + date = models.DateField(default=current_day) + resultlist = models.ManyToManyField(Crew,through='Result') + crew_size = models.IntegerField(default=1) + + class Meta: + unique_together = ('date','name') + + def __str__(self): + return self.name + +class Result(models.Model): + crew = models.ForeignKey(Crew, on_delete=models.CASCADE) + race = models.ForeignKey(Race, on_delete=models.CASCADE) + order = models.PositiveIntegerField() diff --git a/boatmovers/tests.py b/boatmovers/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/boatmovers/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/boatmovers/views.py b/boatmovers/views.py new file mode 100644 index 00000000..91ea44a2 --- /dev/null +++ b/boatmovers/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index 164c9153..f3c29dcd 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -49,6 +49,7 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' INSTALLED_APPS = [ 'rowers', 'survey', + 'boatmovers', # 'cvkbrno', 'django.contrib.admin', 'django.contrib.auth',