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

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -