diff --git a/userprofile/forms.py b/userprofile/forms.py index e26ddf67bac9a06dbdec52a672c9804d4772154a..87c571c88bce56efdb5aa69dd992bd3646603ee2 100644 --- a/userprofile/forms.py +++ b/userprofile/forms.py @@ -4,6 +4,27 @@ from models import Trigger, Contact from django.forms.models import modelformset_factory +def triggerFormFactory(postdata=None, user=None): + class TF(forms.ModelForm): + class Meta: + model = Trigger + exclude = ['user', 'triggerType'] + + contacts = forms.ModelMultipleChoiceField( + queryset=Contact.objects.filter(user=user), + required=False + ) + + # XXX should probably override is_valid and check for + # truth of (atypes or labels) + # and set field error attributes appropriately. + + if postdata is not None: + return TF(postdata) + else: + return TF() + + class TriggerForm(forms.ModelForm): class Meta: model = Trigger diff --git a/userprofile/views.py b/userprofile/views.py index 244ecb81e9de4ba52aa0b93bae03cc1a0d1b32fa..25f8c3d871e8cfd18326d770cbcd9b75f88dbdfd 100644 --- a/userprofile/views.py +++ b/userprofile/views.py @@ -10,7 +10,7 @@ from django.shortcuts import render_to_response from gracedb.userprofile.models import Trigger, Contact -from forms import TriggerForm, ContactForm +from forms import ContactForm, triggerFormFactory def index(request): triggers = Trigger.objects.filter(user=request.ligouser) @@ -24,7 +24,7 @@ def create(request): explanation = "" message = "" if request.method == "POST": - form = TriggerForm(request.POST) + form = triggerFormFactory(request.POST, user=request.ligouser) if form.is_valid(): # Create the Trigger t = Trigger(user=request.ligouser) @@ -43,14 +43,18 @@ def create(request): t.save() request.session['flash_msg'] = "Created: %s" % t.userlessDisplay() return HttpResponseRedirect(reverse(index)) - # Data was bad - if not contacts: - message += "You must specify at least one contact. " - if not (labels or atypes): - message += "You need to indicate label(s) and/or analysis type(s)." + try: + if not contacts: + message += "You must specify at least one contact. " + if not (labels or atypes): + message += "You need to indicate label(s) and/or analysis type(s)." + except NameError: + # form is not valid, so labels, contacts and atypes were not set. + # hopefully, there are error messages in the form. + pass else: - form = TriggerForm() + form = triggerFormFactory(user=request.ligouser) if message: request.session['flash_msg'] = message return render_to_response('profile/createNotification.html',