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 将选定对象从表单传递到另一个表单的主要内容,如果未能解决你的问题,请参考以下文章