this questions addresses question genearally, looking more specific explanation.
i user update a group of model objects, however, queryset these objects need retrieved first. plan in 2 seperate urs/views, getting query set info first, displaying model formset updated next.
my first view gives list of the "project"s (one of models), , retrieves id of project selected.
here form:
class projectlookupform(forms.form): project_name = chosenforms.chosenmodelchoicefield(queryset=project.objects.all())
and here view:
def update_project_filter(request): project_form = projectlookupform(request.post or none) if request.method == 'post': if project_form.is_valid(): context = {"project_form":project_form} # project here , share next view. selected_project_id = project_form.cleaned_data["project_name"].id # add new return statement here? # or call update project view here? # add redirect button html? else: errors = project_form.errors context = {"errors":errors, "project_form":project_form} else: context = {"project_form":project_form} return render(request, 'filter_update_project_form.html', context)
as 1 can see, have included comments brainstorming possibilities are. goal send selected_project_id next view, can use id model form query set.
def update_project(request): updateformset = modelformset_factory(sample, fields=("sample_name", "extraction_date", "project", "order", "notebook", "notebook_page")) if request.method == 'post': formset = updateformset(request.post, request.files) if formset.is_valid(): formset.save() context = {"formset": formset, "project_form":project_form} else: errors = formset.errors context = {"formset":formset, "errors":errors, "project_form":project_form} else: formset = updateformset(queryset=sample.objects.filter(project=2)) context = {"formset":formset, "project_form":project_form} return render(request, 'update_project_form.html', context)
one can see here have hard coded queryset so:
queryset=sample.objects.filter(project=2)
how can set "project=" selected_project_id? pass info view input parameter? or send next url , take there?
assuming you've activated django.contrib.sessions.middleware.sessionmiddleware
; can pass data between views using request.session
dictionary follows:
def update_project_filter(request): ... selected_project_id = project_form.cleaned_data["project_name"].id request.session['selected_project_id'] = selected_project_id ... def update_project(request): ... selected_project_id = request.session.get('selected_project_id') ...
Comments
Post a Comment