Generated: Tue 2013-04-16 10:12 CEST
Source file: /home/tobi/Projects/event-rsvp/src/event_rsvp/forms.py
Stats: 61 executed, 0 missed, 3 excluded, 56 ignored
"""Forms for the ``event_rsvp`` app."""from django import formsfrom django.utils.translation import ugettext_lazy as _from event_rsvp.models import Event, Guestclass EventForm(forms.ModelForm): """Form to handle specific validations of the Event model.""" required_css_class = 'requiredField' def __init__(self, created_by, create_from_template=False, *args, **kwargs): """ :param created_by: Django-Auth User model, which is calling this view :param create_from_template: Boolean to know, if someone is using a template as draft. """ self.instance = kwargs.get('instance') self.create_from_template = create_from_template if hasattr(self.instance, 'id') and not self.create_from_template: # Ignore the current user if it's the update view or if the # instance is a template self.created_by = self.instance.created_by else: # Add the current user as owner self.created_by = created_by if self.create_from_template: # If we use a template, the template_name is the only attribute, # which should not be preset self.instance.template_name = '' super(EventForm, self).__init__(*args, **kwargs) if self.instance.id and self.instance.template_name: self.this_is_a_template = True else: self.this_is_a_template = False def save(self, commit=True): """Saves twice if a template should be created.""" if self.create_from_template: # Save a new event return forms.models.save_instance( self, Event(created_by=self.created_by), self._meta.fields, 'created', commit, False) self.instance.created_by = self.created_by self.instance = super(EventForm, self).save(commit=True) if self.instance.template_name and not self.this_is_a_template: """ If someone wants to save this instance as a template, create a second event as the template and keep the current instance in a 'normal' condition. This is necessary, 'cause otherwise the template would keep the 'good' slug like 'foo-bar', while the new event got a slug like '_foo-bar'. """ template = Event(template_name=self.instance.template_name, created_by=self.created_by) self.instance.template_name = '' self.instance.save() forms.models.save_instance( self, template, self._meta.fields, 'created', commit, False) return self.instance class Meta: model = Event exclude = ('created_by', 'slug')class GuestForm(forms.ModelForm): """Form to handle specific validations of the Guest model.""" required_css_class = 'requiredField' def __init__(self, event, user, *args, **kwargs): """ :param event: Event to participate :param user: Current user or anonymous. """ self.event = event if user and user.is_authenticated(): self.user = user else: self.user = None super(GuestForm, self).__init__(*args, **kwargs) if self.event.id: for field in self.event.required_fields: if field: self.fields[field].required = True def clean_number_of_seats(self): data = self.cleaned_data['number_of_seats'] or 1 free_seats = self.event.get_free_seats() if self.event.available_seats and free_seats < data: if free_seats == 1: msg = _('Sorry. There is only 1 seat left.') else: msg = _('Sorry. There are only %(amount)s seats left.') % { 'amount': free_seats} raise forms.ValidationError(msg) if (self.event.max_seats_per_guest > 0 and data > self.event.max_seats_per_guest): if self.event.max_seats_per_guest == 1: msg = _('Pardon. There is only 1 seat per person reservable.') else: msg = _('Pardon. There are only %(amount)s seats per person' ' reservable.') % { 'amount': self.event.max_seats_per_guest} raise forms.ValidationError(msg) return data def save(self, *args, **kwargs): self.instance.user = self.user self.instance.event = self.event super(GuestForm, self).save(*args, **kwargs) class Meta: model = Guest fields = ('name', 'email', 'phone', 'number_of_seats', 'message')