add crew view
This commit is contained in:
@@ -1,7 +1,10 @@
|
||||
from django.db import models
|
||||
from django import forms
|
||||
from django.core.exceptions import ValidationError
|
||||
|
||||
import datetime
|
||||
from django.utils import timezone
|
||||
import trueskill
|
||||
|
||||
def current_day(ttz=None):
|
||||
if ttz is None:
|
||||
@@ -14,7 +17,8 @@ class Athlete(models.Model):
|
||||
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)
|
||||
trueskill_sigma = models.FloatField(default=25./3.)
|
||||
trueskill_exposed = models.FloatField(default=0)
|
||||
birth_year = models.IntegerField(default=1972)
|
||||
gender = models.CharField(max_length=200, choices=(('m','M'),('f','F')))
|
||||
|
||||
@@ -24,6 +28,12 @@ class Athlete(models.Model):
|
||||
def __str__(self):
|
||||
return u'{f} {l}'.format(f = self.first_name, l=self.last_name)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
rating = trueskill.Rating(self.trueskill_mu, self.trueskill_sigma)
|
||||
self.trueskill_exposed = trueskill.expose(rating)
|
||||
|
||||
super(Athlete, self).save(*args, **kwargs)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return "/boatmovers/athlete/%i/" % self.id
|
||||
|
||||
@@ -39,13 +49,22 @@ class Crew(models.Model):
|
||||
def __str__(self):
|
||||
return u'{n}'.format(n=self.name)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Crew, self).save(*args, **kwargs)
|
||||
|
||||
class crewForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Crew
|
||||
fields = ['name', 'athletes']
|
||||
|
||||
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)
|
||||
crew_size = models.IntegerField(default=1,verbose_name='Nr of rowers per crew (1, 2, 4, 8)')
|
||||
verified = models.BooleanField(default=False)
|
||||
processed = models.BooleanField(default=True)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('date','name')
|
||||
@@ -53,10 +72,61 @@ class Race(models.Model):
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
results = self.results.all()
|
||||
crews = []
|
||||
athletes = []
|
||||
for result in results:
|
||||
crews.append(result.crew.id)
|
||||
for athlete in result.crew.athletes.all():
|
||||
athletes.append(athlete.id)
|
||||
|
||||
if len(crews) != len(set(crews)):
|
||||
raise ValidationError(
|
||||
"Cannot have the same crew more than one time in a race"
|
||||
)
|
||||
|
||||
if len(athletes) != len(set(athletes)):
|
||||
raise ValidationError(
|
||||
"Cannot have the same athlete in different crews in a race"
|
||||
)
|
||||
|
||||
super(Race, self).save(*args, **kwargs)
|
||||
|
||||
class raceForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Race
|
||||
fields = ['name','date','resulturl','crew_size','resultlist']
|
||||
|
||||
|
||||
class Result(models.Model):
|
||||
crew = models.ForeignKey(Crew, on_delete=models.CASCADE)
|
||||
race = models.ForeignKey(Race, on_delete=models.CASCADE)
|
||||
crew = models.ForeignKey(Crew, on_delete=models.CASCADE,
|
||||
related_name='results')
|
||||
race = models.ForeignKey(Race, on_delete=models.CASCADE,
|
||||
related_name='results')
|
||||
order = models.PositiveIntegerField()
|
||||
|
||||
class Meta:
|
||||
unique_together = ('crew','race','order')
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
allresults = self.race.results.all()
|
||||
athletes = []
|
||||
for result in allresults:
|
||||
for athlete in result.crew.athletes.all():
|
||||
athletes.append(athlete.id)
|
||||
if result.crew.id == self.crew.id:
|
||||
raise ValidationError(
|
||||
"Cannot have the same crew more than one time in a race"
|
||||
)
|
||||
if len(athletes) != len(set(athletes)):
|
||||
raise ValidationError(
|
||||
"Cannot have the same athlete in different crews in a race"
|
||||
)
|
||||
|
||||
super(Result,self).save(*args, **kwargs)
|
||||
|
||||
class resultForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Result
|
||||
fields = ['crew','race','order']
|
||||
|
||||
Reference in New Issue
Block a user