Opened 9 years ago
Last modified 9 years ago
#25702 closed New feature
Port ModelAdmin.fieldset to BaseForm — at Initial Version
Reported by: | Laurent Peuch | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | dev |
Severity: | Normal | Keywords: | form modeladmin layout admininterface |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
In the admin interface it is possible to control the admin forms layout using the fieldset attribute. This feature is described here: https://docs.djangoproject.com/en/1.8/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets
Here is the example from the documentation (modified to display the feature that allows to display multiple fields in the same line):
from django.contrib import admin class FlatPageAdmin(admin.ModelAdmin): fieldsets = ( (None, { 'fields': (('url', 'title'), ('content', 'sites')) }), ('Advanced options', { 'classes': ('collapse',), 'fields': ('enable_comments', 'registration_required', 'template_name') }), )
The idea of this feature would be to port this exact behavior to the standard django forms. Taking the first form example from the documentation, this could look like this:
from django import forms class ContactForm(forms.Form): subject = forms.CharField(max_length=100) message = forms.CharField(widget=forms.Textarea) sender = forms.EmailField() cc_myself = forms.BooleanField(required=False) fieldset = ( (None, { "fields": (('sender', 'cc_myself'),), }), ("Content", { "fields": ("subject", "message"), }), )
Currently, there is no way to modify the form layout beside the field order. This is very frustrating because this mean that if you want modify the layout of a form, you need to explode it totally to do that or you need to use another project (like django-crispy-forms (1) or another one).
While not going to all the extend of what django-cripsy-forms or another project is doing, fieldset is an already known and used convention accross the django project and allowing it in standard forms seems like a natural and intuitive choice.
(1) http://django-crispy-forms.readthedocs.org/en/latest/layouts.html