This вопросы адресуют мой вопрос по фамилии, но я ищу более конкретное объяснение.Как передавать данные между представлениями django
Я бы хотел, чтобы пользователь обновил группу объектов модели, однако запрос на выбор этих объектов необходимо будет получить первым. Мой план состоит в том, чтобы сделать это в двух отдельных UR/представлениях, получив информацию о запросе с первого, а затем отобразив следующий набор моделей моделей.
В моем первом представлении представлен список всех «проектов» (одна из моих моделей) и извлекается идентификатор выбранного проекта.
Вот форма:
class ProjectLookupForm(forms.Form):
Project_Name = chosenforms.ChosenModelChoiceField(queryset=Project.objects.all())
и вот вид:
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}
# Get project here and share it with the next view.
selected_project_id = project_form.cleaned_data["Project_Name"].id
# Add a new return statement here?
# Or call update project view from here?
# Add a redirect button to 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)
Как можно видеть, я включил некоторые комментарии мозговой атаки, каковы мои возможности. Моя цель - отправить выбранный_project_id на это следующее представление, чтобы он мог использовать этот идентификатор в качестве набора запросов модели.
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)
Здесь можно увидеть, что я жестко закодировал QuerySet так:
queryset=Sample.objects.filter(project=2)
Как я могу установить «проект =» на мой selected_project_id? Я передаю эту информацию в представление в качестве входного параметра? Или отправить его на следующий URL-адрес и взять его оттуда?
Извините, что самая первая ссылка сейчас фактически ссылается на что-то значимое. – Malonge