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.

