python - How to pass data between django views -


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