django-nested-forms 0.1.1

Nested forms for your Django projects
django-nested-forms is a Django app that will help you to easily create nested forms in your project.

Usage

First of all, insert the nested_forms folder in in project's path.

In your forms.py

from nested_forms import ComplexModelForm

Make you main form inherit from ComplexModelForm

In Meta subclass of your ComplexModelForm, add :

formsets = {
}

This dict has for keys the related objects' names.

For the examples form Django's tutorial, we could write :

def get_choice_form(poll):
 class ChoiceForm(forms.ModelForm):
 class Meta:
 model = Choice
 exclude = ['poll']

 def save(self, commit=True):
 instance = super(ChoiceForm, self).save(commit=False)
 instance.poll = poll
 if commit:
 instance.save()
 self.save_m2m()
 return instance

 return ChoiceForm

class PollForm(ComplexModelForm):
 class Meta:
 model = Poll
 formsets = {
 'choice_set': {
 'form': lambda instance: get_choice_form(instance),
 'extra': 1,
 'initial': [
 {
 'choice': 'A sample choice',
 'votes': 0,
 }
 ],
 },
 }


You now have a nested form. Let's start using it in your template.

In your templates

Considering your nested form instance in a form variable in your context, you can access your access your form fields like any other forms. Your formsets are accessible by {{ form.formsets.[ name of related name of your object] }}. Don't forget to add the management form for each, and each formset is like any formset you would create manually. DON'T FORGET TO IMPLEMENT THE "ADD" TEMPLATE FILTER !

< form method="post" >
 < fieldset >
 < legend >Poll< /legend >
 {{ form.as_div }}

 {% with form.formsets.choice_set as choice_formset %}
 {{ choice_formset.management_form }}
 {% for choice_form in choice_formset.forms %}
 < fieldset >
 < legend >Choice {{ forloop.counter }}< /legend >
 {{ choice_form.as_div }}
 < /fieldset >
 {% endfor %}
 < button name="{{ choice_formset.prefix }}-TOTAL_FORMS" value="contact_formset.total_form_count|add:1" >
 Add a choice
 < /button >
 {% endwith %}
 < /fieldset >
 < input type="submit" value="Save poll"/ >
< /form >

last updated on:
October 4th, 2011, 1:24 GMT
price:
FREE!
developed by:
Damien Szczyt
license type:
Other/Proprietary License
category:
ROOT \ Internet \ HTTP (WWW)

FREE!

In a hurry? Add it to your Download Basket!

user rating

UNRATED
0.0/5
 

0/5

Add your review!

SUBMIT