From 0ce3be9faab3ba72180267324e04524c2ca09933 Mon Sep 17 00:00:00 2001 From: Brian Moe <lars@moe.phys.uwm.edu> Date: Wed, 25 Nov 2009 17:07:24 -0600 Subject: [PATCH] On create notification, only user's own contacts are now displayed. --- userprofile/forms.py | 21 +++++++++++++++++++++ userprofile/views.py | 20 ++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/userprofile/forms.py b/userprofile/forms.py index e26ddf67b..87c571c88 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 244ecb81e..25f8c3d87 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', -- GitLab