Hey all,

Been trying to display multiple form rows for a project lately, and I  
just wanted to confirm that I'm doing this right. I found a solution  
on http://www.pointy-stick.com/blog/2009/01/23/advanced-formset-usage-django/ 
, and I took what I needed from it (my code below), but I found that  
whenever I passed in my request.POST data it was getting overwritten  
by the users and resource data. So then I  in checks for data and try  
statements to make sure everything was going where it should.  
Everything works now, but I'm not sure if I'm leaving some sort of  
important edge case unattended too, or what. So my question is: is the  
way that I'm handling errors here the correct way of doing multiple  
form rows? And if not, why not? Surprise, I'm new to both Python and  
Django, which is why I want to make sure I'm doing this both "django"- 
ly and "pythonic"-ly.

#VIEW
@login_required
def manage_roles(request, resource_id):
     resource = get_object_or_404(Lock, pk=resource_id)
     if(request.method == "POST"):
         formset = create_roles_formset(resource, request.POST)
         if formset.is_valid():
             for form in formset.forms:
                #Haven't actually hooked up the templates and success logic yet.
                 print form.cleaned_data['role']
                 print form.cleaned_data['user']
                 print '-'
     else:
         formset = create_roles_formset(resource)
         dictToSend['rolesForm'] = formset
     dictToSend['resource'] = resource
     return render_to_response('locks/manage_roles.html', dictToSend,  
context_instance=RequestContext(request))

def create_roles_formset(resource, data=None):
     users = User.objects.filter(lockmembership__lock=resource)
     if not users:
         raise Http404('Invalid user id(s)')
     ResourceFormset = formsets.formset_factory(ResourceRoleForm,  
ResourceRolesFormset)
     if not data:
         return ResourceFormset(data, users=users, resource=resource)
     else:
         return ResourceFormset(data)

#FORMS
class ResourceRolesFormset(formsets.BaseFormSet):
     def __init__(self, *args, **kwargs):
         if 'resource' in kwargs and 'users' in kwargs:
             self.resource = kwargs.pop("resource")
             self.users = list(kwargs.pop("users"))
             self.extra = len(self.users)
         super(ResourceRolesFormset, self).__init__(*args, **kwargs)

     def _construct_form(self, i, **kwargs):
         try:
             kwargs["user"] = self.users[i]
             kwargs["resource"] = self.resource
         except AttributeError:
             pass
         return super(ResourceRolesFormset, self)._construct_form(i,  
**kwargs)

class ResourceRoleForm(forms.Form):
     role = forms.ChoiceField(widget=forms.Select,  
choices=LockMembership.LOCK_ROLES)
     user = forms.IntegerField(widget=forms.HiddenInput)

     def __init__(self, *args, **kwargs):
         print kwargs
         try:
             resource = kwargs.pop("resource")
             user = kwargs.pop("user")
         except KeyError:
             pass
         super(ResourceRoleForm, self).__init__(*args, **kwargs)
         try:
             lm = LockMembership.objects.filter(lock=resource,  
user=user)[0]
             self.fields['role'].initial = lm.role
             self.fields['role'].label = user.username
             self.fields['user'].initial = user.id
         except KeyError:
             pass
         except UnboundLocalError:
             pass


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to