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

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top