Source code for matching.forms

from django import forms
from django.contrib.auth import get_user_model
from django.core.exceptions import ValidationError
from .models import Invitation

[docs]class InvitationResponseForm(forms.ModelForm): """ A form for responding to an invitation. Validates that the user responding to the invitation is one of the mentor or the mentee and that the invitation is active. Example: .. code:: invitation = # ... Retrieve Invitation instance f = InvitationResponseForm( data={'user': request.user.id, 'response': Invitation.ACCEPT}, instance=invitation ) f.save() """ class Meta: model = Invitation fields = [] #: The database primary key for the user responding to the invitation. user = forms.ModelChoiceField(queryset=get_user_model().objects.all()) #: The response. One of :py:data:`Invitation.ACCEPT` or #: :py:data:`Invitation.DECLINE` response = forms.ChoiceField(choices=Invitation.RESPONSES) def clean(self): cleaned_data = super(InvitationResponseForm, self).clean() if not self.instance.is_active(): raise ValidationError('Invitation is inactive') response = cleaned_data.get('response') user = cleaned_data.get('user') if user is not None and response is not None: if response == Invitation.ACCEPT: self.instance.respond(user, True) elif response == Invitation.DECLINE: self.instance.respond(user, False) else: raise ValidationError('Unknown response: %s' % response) return cleaned_data def clean_user(self): invite = self.instance user = self.cleaned_data['user'] if user.id != invite.mentor.id and user.id != invite.mentee_id: raise ValidationError('User is not mentor or mentee') return user