Django 将选定对象从表单传递到另一个表单

Posted

技术标签:

【中文标题】Django 将选定对象从表单传递到另一个表单【英文标题】:Django pass selected object from form to another form 【发布时间】:2014-05-09 08:46:34 【问题描述】:

我有 2 页。第 2 步和第 3 步。我要做的是将所选对象从第 2 步表单传递到第 3 步表单,以便过滤第 3 步表单的对象。您可以在下图中看到 2 个页面/表格。所以当用户在第 2 步选择大学时,第 3 步必须只显示所选大学的课程。

我当前的代码非常简单,因为我删除并重写了过去几天的代码而没有结果。

views.py

def step2(request):
    universities = University.objects.order_by('name').distinct()
    return render_to_response("registration/step2.html", 'universities': universities,  RequestContext(request))

def step3(request):
    courses = Course.objects.order_by('name')
    return render_to_response("registration/step3.html", 'courses': courses,  RequestContext(request))

【问题讨论】:

谁能链接一个类似的 CBV 示例? 【参考方案1】:

在您看来,您必须检索用户所做的选择并使用它来过滤下一个表单的选择。比如:

form = FirstForm(request.POST)
if form.is_valid():
    uni = form.cleaned_data['uni']
    courses = Course.objects.filter(university__name=uni).order_by('name')
    return render_to_response("registration/step3.html", 'courses': courses,  RequestContext(request))

【讨论】:

感谢您的快速答复!通过cleaned_data['uni'],我得到了<option value="12">Example University</option> 的值12?还是Example University?也不确定在 forms.py 中输入什么:class FirstForm(forms.Form): university = forms.CharField() 最后因为这是 def step2 我应该在 def step3 中添加什么?再次感谢! (更新:现在进入第3步,但是选择课程小部件是空的,所以我猜过滤中有问题) 首先,您应该使用大学的 id 作为选项值或其他标识符。这样,您可以在进行过滤时使用它,即Course.objects.filter(university__id=uni_id)。如果课程选择为空,请测试您是否从后端发送任何课程。 是的,你是对的!最后一个问题,使用此代码,当您提交表单时,URL 保持不变 /step/2/ 而不是转到 /step/3/。一切正常,但 URL 中的数字没有改变。 好吧,你需要在你的模板中自己更改 URL。 问题是有2个表格/页面。所以在第2步时,应该是step/2/,点击提交时,应该是step/3/。

以上是关于Django 将选定对象从表单传递到另一个表单的主要内容,如果未能解决你的问题,请参考以下文章

将数据从一个表单域传递到另一个表单域

提交表单时将选定对象 ID 的列表传递给控制器

如何将值从一个表单传递到另一个表单的动态创建的控件

django 表单发布到另一个表单

从 Django 表单 ChoiceField 中检索选定的选项

将一个列表从一个类传递到另一个表单的列表框