Django's class-based generic views are great, they let you accomplish a large number of web application design patterns in relatively few lines of code. They do have their limits though, and that's what this library of views aims to overcome.
- FormSet and ModelFormSet views - The formset equivalents of FormView and ModelFormView.
- InlineFormSetView - Lets you edit formsets related to a model (uses inlineformset_factory)
- CreateWithInlinesView and UpdateWithInlinesView - Lets you edit a model and its relations
- GenericInlineFormSetView, the equivalent of InlineFormSetView but for GenericForeignKeys
- Support for generic inlines in CreateWithInlinesView and UpdateWithInlinesView
- Support for pagination in ModelFormSetView
Defining a FormSetView. :
from extra_views import FormSetView
class AddressFormSet(FormSetView):
form_class = AddressForm
template_name = 'address_formset.html'
Defining a ModelFormSetView. :
from extra_views import ModelFormSetView:
class ItemFormSetView(ModelFormSetView):
model = Item
template_name = 'item_formset.html'
Defining a CreateWithInlinesView and an UpdateWithInlinesView. :
from extra_views import CreateWithInlinesView, UpdateWithInlinesView, InlineFormSet
from extra_views.generic import GenericInlineFormSet
class ItemInline(InlineFormSet):
model = Item
class TagInline(GenericInlineFormSet):
model = Tag
class CreateOrderView(CreateWithInlinesView):
model = Order
inlines = [ItemInline, TagInline]
class UpdateOrderView(UpdateWithInlinesView):
model = Order
inlines = [ItemInline, TagInline]
# Example URLs.
urlpatterns = patterns('',
url(r'^orders/new/$', CreateOrderView.as_view()),
url(r'^orders/(?P<pk>\d+)/$', UpdateOrderView.as_view()),
)
More descriptive examples to come.