From b3e7b1be8c2ce9445c0dca924c27143de839cd01 2015-07-31 00:25:46 From: Hiroshi Miura Date: 2015-07-31 00:25:46 Subject: [PATCH] add more addtitional speakers constraints Signed-off-by: Hiroshi Miura --- diff --git a/symposion/proposals/models.py b/symposion/proposals/models.py index 5cb4baa6d81ec42a54d8e2461c66675eaceba218..7dea87cd8379887f34255d047a4cb837d3173797 100644 --- a/symposion/proposals/models.py +++ b/symposion/proposals/models.py @@ -9,6 +9,7 @@ from django.utils.timezone import now from django.contrib.auth.models import User from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ValidationError import reversion @@ -106,8 +107,15 @@ class ProposalBase(models.Model): editable=False, ) speaker = models.ForeignKey(Speaker, related_name="proposals") + + def additional_speaker_validator(self, a_speaker): + if a_speaker.speaker.email == self.speaker.email: + raise ValidationError(_("%s is same as primary speaker.") % a_speaker.speaker.email) + if a_speaker in [self.additional_speakers]: + raise ValidationError(_("%s has already been in speakers.") % a_speaker.speaker.email) + additional_speakers = models.ManyToManyField(Speaker, through="AdditionalSpeaker", - blank=True) + blank=True, validators=[additional_speaker_validator]) cancelled = models.BooleanField(default=False) def can_edit(self): @@ -147,7 +155,6 @@ class ProposalBase(models.Model): "kind": self.kind.name, } - reversion.register(ProposalBase) @@ -170,6 +177,14 @@ class AdditionalSpeaker(models.Model): class Meta: unique_together = ("speaker", "proposalbase") + def __unicode__(self): + if self.status is self.SPEAKING_STATUS_PENDING: + return _(u"pending speaker (%s)") % self.speaker.email + elif self.status is self.SPEAKING_STATUS_DECLINED: + return _(u"declined speaker (%s)") % self.speaker.email + else: + return self.speaker.name + def uuid_filename(instance, filename): ext = filename.split(".")[-1]