Extra class-based views for Django
Project description
Django Extra Views - The missing class-based generic views for Django
Django-extra-views is a Django package which introduces additional class-based views in order to simplify common design patterns such as those found in the Django admin interface.
Supported Python and Django versions: Python 3.5+, Django 2.2-4.2, see tox.ini for an up-to-date list.
Full documentation is available at read the docs.
Installation
Install the stable release from pypi (using pip):
pip install django-extra-views
Or install the current master branch from github:
pip install -e git://github.com/AndrewIngram/django-extra-views.git#egg=django-extra-views
Then add 'extra_views' to your INSTALLED_APPS:
INSTALLED_APPS = [
...
'extra_views',
...
]
Features
FormSet and ModelFormSet views - The formset equivalents of FormView and ModelFormView.
InlineFormSetView - Lets you edit a formset related to a model (using Django’s inlineformset_factory).
CreateWithInlinesView and UpdateWithInlinesView - Lets you edit a model and multiple inline formsets all in one view.
GenericInlineFormSetView, the equivalent of InlineFormSetView but for GenericForeignKeys.
Support for generic inlines in CreateWithInlinesView and UpdateWithInlinesView.
Support for naming each inline or formset in the template context with NamedFormsetsMixin.
SortableListMixin - Generic mixin for sorting functionality in your views.
SearchableListMixin - Generic mixin for search functionality in your views.
SuccessMessageMixin and FormSetSuccessMessageMixin - Generic mixins to display success messages after form submission.
Still to do
Add support for pagination in ModelFormSetView and its derivatives, the goal being to be able to mimic the change_list view in Django’s admin. Currently this is proving difficult because of how Django’s MultipleObjectMixin handles pagination.
Quick Examples
FormSetView
Define a FormSetView
, a view which creates a single formset from
django.forms.formset_factory
and adds it to the context.
from extra_views import FormSetView
from my_forms import AddressForm
class AddressFormSet(FormSetView):
form_class = AddressForm
template_name = 'address_formset.html'
Then within address_formset.html, render the formset like this:
<form method="post">
...
{{ formset }}
...
<input type="submit" value="Submit" />
</form>
ModelFormSetView
Define a ModelFormSetView
, a view which works as FormSetView
but instead renders a model formset using
django.forms.modelformset_factory
.
from extra_views import ModelFormSetView
class ItemFormSetView(ModelFormSetView):
model = Item
fields = ['name', 'sku']
template_name = 'item_formset.html'
CreateWithInlinesView or UpdateWithInlinesView
Define CreateWithInlinesView
and UpdateWithInlinesView
,
views which render a form to create/update a model instance and its related
inline formsets. Each of the InlineFormSetFactory
classes use similar
class definitions as the ModelFormSetView
.
from extra_views import CreateWithInlinesView, UpdateWithInlinesView, InlineFormSetFactory
class ItemInline(InlineFormSetFactory):
model = Item
fields = ['sku', 'price', 'name']
class ContactInline(InlineFormSetFactory):
model = Contact
fields = ['name', 'email']
class CreateOrderView(CreateWithInlinesView):
model = Order
inlines = [ItemInline, ContactInline]
fields = ['customer', 'name']
template_name = 'order_and_items.html'
class UpdateOrderView(UpdateWithInlinesView):
model = Order
inlines = [ItemInline, ContactInline]
fields = ['customer', 'name']
template_name = 'order_and_items.html'
Then within order_and_items.html, render the formset like this:
<form method="post">
...
{{ form }}
{% for formset in inlines %}
{{ formset }}
{% endfor %}
...
<input type="submit" value="Submit" />
</form>
Contributing
Pull requests are welcome. To run all tests locally, setup a virtual environment and run
tox
Before committing, use pre-commit to check all formatting and linting
pip install pre-commit
pre-commmit install
This will automatically run black, isort and flake8 before the commit is accepted.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file django_extra_views-0.15.0-py2.py3-none-any.whl
.
File metadata
- Download URL: django_extra_views-0.15.0-py2.py3-none-any.whl
- Upload date:
- Size: 15.2 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 610e6f24d4831cc065622420a6622c558b5b3fc4bc6797c3bbe0c3398e4995b8 |
|
MD5 | ee18365e2987cd1a5db8b67466e01972 |
|
BLAKE2b-256 | 863d1c18a2931c7422fbda1791bda2283b72a1f13da1902822778f2bcb81c4a2 |