Here is the example from the documentation (modified to display the
feature that allows to display multiple fields in the same line):
{{{#!python
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:
{{{#!python
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 [#point1 (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.
[=#point1 (1)] http://django-crispy-
forms.readthedocs.org/en/latest/layouts.html
--
Ticket URL: <https://code.djangoproject.com/ticket/25702>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Old description:
New description:
Regarding the API, I'm wondering if puting the //fieldset// attribute in
the //Meta// class doesn't make more sens since it is already used (only
for the //ModelForm//?) to specify options and this will avoid a conflict
with currently existing fields named //fieldset//.
This would look like this:
{{{#!python
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)
class Meta:
fieldset = (
(None, {
"fields": (('sender', 'cc_myself'),),
}),
("Content", {
"fields": ("subject", "message"),
}),
)
}}}
[=#point1 (1)] http://django-crispy-
forms.readthedocs.org/en/latest/layouts.html
--
--
Ticket URL: <https://code.djangoproject.com/ticket/25702#comment:1>
* status: new => closed
* resolution: => duplicate
Comment:
This looks like a duplicate of #6630. I have to say I agree with Carl that
formsets are too much display logic in Python.
They make a bit more sense at the admin level since you want a quick an
dirty way to order your fields without having to write a template.
In the case of forms efforts have been made to move the whole logic to the
template level and eventually deprecate the `as_(p|table|ul)` methods
which are the only methods that would rely on this option.
If you disagree with these ticket resolutions please voice your opinion on
the developer mailing list. In the meanwhile I'll just mark this ticket as
a duplicate.
--
Ticket URL: <https://code.djangoproject.com/ticket/25702#comment:2>