python - django formset update existing -
i want create similar django admin changelist view list_editable items...
i succeeded in creating view. when post dies on validation errors.
if request.post: formset_class = modelformset_factory(job) formset =formset_class(request.post, request.files) if formset.is_valid(): formset.save()
the problem have couple of attributes editable. therefore of them not part of post , model complains them being mandatory.
but want update objects not create them. want same thing admin when having set list_editable
in own view
i wanted functionality admin using list_editable, went , pretty copied code options.py
of django source. retrieved admin object , saved original values (function fix_old_job_admin
sets them back)
this code solved problem
job_admin = admin.site._registry[job] # save old values can go them later old_list_display = job_admin.list_display old_list_filter = job_admin.list_filter old_ordering = job_admin.model._meta.ordering job_admin.list_editable = ("time", "what", "approved") cl = changelist(request, job_admin.model, job_admin.list_display, job_admin.list_display_links, job_admin.list_filter, job_admin.date_hierarchy, job_admin.search_fields, job_admin.list_select_related, job_admin.list_per_page, job_admin.list_editable,job_admin.admin_site, job_admin) # options.py django framework lines 1181-1208 (v. 1.4) if request.post: formset = job_admin.get_changelist_formset(request) formset =formset(request.post, request.files, queryset=cl.result_list) if formset.is_valid(): changecount = 0 form in formset.forms: if form.has_changed(): obj = job_admin.save_form(request, form, change=true) job_admin.save_model(request, obj, form, change=true) job_admin.save_related(request, form, formsets=[], change=true) change_msg = job_admin.construct_change_message(request, form, none) job_admin.log_change(request, obj, change_msg) changecount += 1 if changecount: if changecount == 1: name = force_unicode(job_admin.model._meta.verbose_name) else: name = force_unicode(job_admin.model._meta.verbose_name_plural) msg = ungettext("%(count)s %(name)s changed successfully.", "%(count)s %(name)s changed successfully.", changecount) % {'count': changecount, 'name': name, 'obj': force_unicode(obj)} job_admin.message_user(request, msg) # call function sets admin original values fix_old_job_admin(job_admin, old_list_display, old_ordering, old_list_filter) return httpresponseredirect(request.get_full_path()) formset = job_admin.get_changelist_formset(request) cl.formset = formset(queryset=cl.result_list) context = context({ 'app_label': contenttype.objects.get_for_model(lawyer).app_label, 'verbose_name_plural': job._meta.verbose_name_plural.title(), "cl": cl, 'request': request, }) # call function sets admin original values fix_old_job_admin(job_admin, old_list_display, old_ordering, old_list_filter) return render_to_response('yourtemplate/similar_to_changelist.html', context, requestcontext(request))
Comments
Post a Comment