its works

El jueves, 26 de abril de 2012, 8:25:42 (UTC+2), Martin Tiršel escribió:
>
> Thanks, form.has_changed() seems to be the way. But I don't understand the 
> empty_permitted attribute, it is usable only with ModelForm? I am using the 
> formset only for mass form processing not for inserting/updating models.
>
> Martin
>
>
> On Wednesday, April 25, 2012 2:35:20 PM UTC+2, Tom Evans wrote:
>>
>> Hmm. Internally, model formsets do this differently - they are aware
>> of which forms are extra forms, and which forms are existing forms.
>>
>> New forms will have form.empty_permitted=True, unmodified forms will
>> return True from form.has_changed(). This should be enough to skip
>> over blank new forms.
>>
>> Cheers
>>
>> Tom
>>
>> On Wed, Apr 25, 2012 at 12:55 PM, Martin Tiršel <[email protected] 
>> <javascript:>> wrote:
>> > I am using class based views and my code is:
>> >
>> > class PayOrdersView(AdminFormSetView):
>> >     form_class = PayOrderForm
>> >     template_name = 'internal/orders/pay_orders_form.html'
>> >     active_item = 'order_pay_orders'
>> >     context_formset_name = 'pay_orders_formset'
>> >     extra = 2
>> >
>> >     def formset_valid(self, formset):
>> >         logger.debug('Executing formset_valid')
>> >         for form in formset:
>> >             logger.debug('Is empty: %s' % form.empty_permitted)
>> >             form.save()
>> >         return super(PayOrdersView, self).formset_valid(formset)
>> >
>> >
>> > formset_valid method is called after formset.is_valid(). I start with 2
>> > empty forms, I insert into first form order number and the second form 
>> stays
>> > empty. After I submit, I get:
>> >
>> > [2012-04-25 13:42:07,776] DEBUG [31099 140249342375680]
>> > [project.internal.mixins:304] Processing POSTed form
>> > [2012-04-25 13:42:07,778] DEBUG [31099 140249342375680]
>> > [project.internal.forms:29] Cleaning order_number
>> > [2012-04-25 13:42:07,837] DEBUG [31099 140249342375680]
>> > [project.internal.mixins:307] Formset is valid
>> > [2012-04-25 13:42:07,842] DEBUG [31099 140249342375680]
>> > [project.internal.views:93] Executing formset_valid
>> > [2012-04-25 13:42:07,843] DEBUG [31099 140249342375680]
>> > [project.internal.views:95] Is empty: True
>> > [2012-04-25 13:42:07,843] DEBUG [31099 140249342375680]
>> > [project.internal.forms:54] Saving PayOrderForm
>> > [2012-04-25 13:42:09,914] DEBUG [31099 140249342375680]
>> > [project.internal.views:95] Is empty: True
>> > [2012-04-25 13:42:09,914] DEBUG [31099 140249342375680]
>> > [project.internal.forms:54] Saving PayOrderForm
>> >
>> > So both forms have empty_permitted == True. Management form in time of
>> > submit looks so:
>> >
>> > <input id="id_form-TOTAL_FORMS" type="hidden" value="2"
>> > name="form-TOTAL_FORMS">
>> > <input id="id_form-INITIAL_FORMS" type="hidden" value="0"
>> > name="form-INITIAL_FORMS">
>> > <input id="id_form-MAX_NUM_FORMS" type="hidden" 
>> name="form-MAX_NUM_FORMS">
>> >
>> > Thanks, Martin
>> >
>> > On Wednesday, April 25, 2012 11:03:49 AM UTC+2, Tom Evans wrote:
>> >>
>> >> On Sun, Apr 22, 2012 at 5:44 PM, Martin Tiršel <[email protected] 
>> <javascript:>>
>> >> wrote:
>> >> > Hello,
>> >> >
>> >> > I have a formset and some JavaScript to add more forms into this
>> >> > formset. In
>> >> > a view, I iterate through the formset saving (not a ModelForm just 
>> Form
>> >> > with
>> >> > save method) each form:
>> >> >
>> >> > for form in formset:
>> >> >     form.save()
>> >> >
>> >> > But I want to ignore empty forms that were added by JavasScript and 
>> not
>> >> > removed. How can I do this?
>> >> >
>> >> > Thanks,
>> >> > Martin
>> >> >
>> >>
>> >> You don't show much of your code, but I presume you have called
>> >> formset.is_valid() at this point?
>> >>
>> >> If so, this pattern is pretty canonical:
>> >>
>> >> if formset.is_valid():
>> >>     for form in formset:
>> >>         if form.is_valid() and not form.empty_permitted:
>> >>             form.save()
>> >>
>> >> Extra forms in a formset are all instantiated with 
>> empty_permitted=True.
>> >>
>> >> There are other things to be aware of though. This logic will not take
>> >> into account deleted forms etc, which is why there is a
>> >> BaseModelFormSet with the right behaviour baked into it's save()
>> >> method.
>> >>
>> >> Cheers
>> >>
>> >> Tom
>> >
>> > --
>> > You received this message because you are subscribed to the Google 
>> Groups
>> > "Django users" group.
>> > To view this discussion on the web visit
>> > https://groups.google.com/d/msg/django-users/-/aKliGdMNqGwJ.
>> >
>> > To post to this group, send email to [email protected] 
>> <javascript:>.
>> > To unsubscribe from this group, send email to
>> > [email protected] <javascript:>.
>> > For more options, visit this group at
>> > http://groups.google.com/group/django-users?hl=en.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/443574b0-cabc-44ac-8d28-02f2ae74423a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to