On Jun 3, 2:57 pm, Russell Keith-Magee <russ...@keith-magee.com>
wrote:
> On Thu, Jun 3, 2010 at 7:41 PM, petr.marhoun <petr.marh...@gmail.com> wrote:
> > Hello,
>
> > I would like to propose some improvements for django.forms. But it is
> > seven quite independent proposals - one mail would be to long, seven
> > emails would too many emails. So I have created wiki page - is it a
> > good procedure?
>
> It's not really ideal, because it makes the initial phases of much
> harder. Starting a wiki page is a good idea when you have a single,
> very complex idea, and you want to track the evolution of planning.
> However, if you have lots of little ideas, you would be better served
> with a single email so that we have something to hang the discussion
> on.
>
> That said, here's some initial feedback:
>
> 1. Fieldsets
>
> This is effectively just exposing an Admin capability into general
> forms; I'm +1 to this general idea.
>
> One complication I can see is how to handle iteration. "for field in
> form" currently assumes that all the fields are ungrouped. How does
> this change when fieldsets are introduced? Does iterating over the
> form give you fieldsets, which are themselves iterable? Do you need to
> iterate over "for fieldset in form.fieldsets", with "for field in
> form" iterating over the raw fields independently of the fieldsets?
>
> I'm also not entirely clear how we can/should implement this with BaseForm.
>
> So - more detail required, but generally +1 from me.

OK, more details: If fieldsets would be defined, fields would be
concatenation of fields from individual fieldsets. So methods
as_table, as_ul and as_li and "for field in form" would work as now.
But if you want to really use fieldsets, you have to iterate fieldsets
in your templates.

I think I am able to implement it - but the first step is to decide
what to implement.

> I would also point out that one of the acceptance criteria for this
> proposal should be backporting the changes into Admin. Admin should be
> the best example of us eating our own dogfood; however, the tools in
> admin have a habit of evolving on their own a little bit too much. If
> this give us an opportunity to do some of this housekeeping, I'd call
> that a big win.

Yes, it is difficult. I think that admin has one kind of functionality
(not only forms, but also for example pagination, ordering or
filtering) in too many places (model admin, helper methods and
classes, templates, template tags ), it could be encapsulated in one
class. But I do not think that it is possible to change without
breaking backward-compatibility. So for forms and fieldsets I would
propose only extract meta attributes of forms as class attributes of
model admin.

> 2. Inlines
>
> I'm not sure I see the benefit of this. Why does inline processing
> need to be crammed into the base form?

Because I want to edit object including related objects. So the
object's form is valid if all inlines are valid. And saving the
objects means to save all inlines.

Yes, it is possible to iterate all inlines and decide if they are
valid and then save them once by once - but I thing it is very common
activity and it should be in core forms. And what if I want to edit my
objects with general views (for example class model views which could
be in 1.3)? How should I tell the general view I want to edit also
related objects?

> 3. Better API for formsets
>
> Formsets are complex beasts, to be sure. However, I'm extremely wary
> of proposals that advocate widespread changes to existing API.
> Backwards compatibility will be a *huge* issue here - however broken
> the current implementation may be, we can't change the conditions
> under which forms validate at present.
>
> That said, I'm sure there are validation edge cases that can be
> legitmately called bugs, and that aren't tested at the moment. If
> cleaning up the formset API allows us to fix those edge cases, all the
> better.
>
> So - a tentative +0 to this idea, but most of the effort will be in
> proving that you're fixing bugs, not breaking features.

Current API for using of validated formsets is:
- cleaned_data - I think that this property is broken by design
because valid formsets can have invalid forms without cleaned_data (if
they should be deleted).
- deleted_forms - it is useful as it is.
- ordered_forms - it is useful as it is but it would be redundant if
there would be more general property working also with unordered
formsets.

And there is no API for the my main requirement: give me all filled
and valid forms and nothing more, possible ordered (if can_order is
True). I propose new property which give me these forms.

So my proposal in other words:
1. Simplify formset validation with full backward-compatibility (minus
bugs).
2. Add new property "cleaned_forms" which do the right thing.
3. Possible deprecate "ordered_forms" (because it is redundant).
4. Possible deprecate "cleaned_data" (because it is broken by design -
there is note in code: "# Maybe this should just go away?").

> 4. Model fields with not-default values
>
> Isn't this mostly what the new widget Meta argument does?

The new widget meta argument does it for one specific case. My
proposal is general for all keyword arguments. It is possible to add
more and more meta arguments (help_texts and labels and so on) - but
is it a good idea? And there could be some arguments specific for only
one type of fields, they need general method for setting of not-
default value.

> 5. Parameters "template" and "attrs" for forms, formsets, fieldsets,
> forms, (bound) fields and widgets
> 6. Support for (X)HTML5 and legacy HTML
>
> I strongly suspect that these two may be covered by something I
> discussed with Jacob at DjangoCon. Broadly, the proposal is to
> deprecate the {{ field }} and {{ form }} approach to template
> rendering in favor of a template tag {% render field %} and  {% render
> form %}; these template tags would allow you to customize the way that
> individual fields, fieldsets and forms are rendered, including
> controlling doctype compliance.
>
> If you want to override the way fields or forms are rendered, you will
> be able to subclass the base render template tag, override the
> rendering behavior, and re-register the tag (or register it under a
> different name).
>
> I've been tinkering with this since DjangoCon.eu; I hope to be able to
> present something once I surface from jetlag and the backlog of mail
> and other tasks in my inbox.
>
> 7. Requests in forms
>
> I suspect the answer on this one will be no for the simple reason of
> backwards compatibility. A request attribute is only really useful if
> it is ubiquitous, and there's no way to make it ubiquitous without
> breaking backwards compatibility. Truth be told, having the request
> around would have made CSRF a lot easier, but it wasn't so we had to
> fall back on {% csrf_token %}.
>
> This is also something that can be implemented in user-space by
> subclassing a form and enforcing the request argument. So, call this a
> -0 from me.

I think it should not be backward-incompatible - init of forms and
formsets would have last argument requiest with default value None. So
current code will continue to work.

But I fully agree that it could be solved by subclass which would save
the request. But if it will be quite common for init methods to accept
request arguments, new generic views could set this argument.
Otherwise everybody who would like to use request in forms and generic
views has to subclass forms and generic views, they could not be
enhanced independently.

> There's some brief feedback. My one additional request is to try not
> to be too ambitious. You've proposed a lot of work here; frankly, if
> you only got (1) finished for 1.3 I would consider it to be a major
> win.

>
> Yours,
> Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-develop...@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to