html - django表单发布到另一个表单

标签 html django forms redirect post

我正在尝试创建一个提供另一个表单的表单。最新的迭代如下所示。流程如下:

用户从 form1 的两个下拉列表中选择一个学期。 当该页面被发布时,这些下拉列表中的值将用作下一个加载表单的查询过滤器。

我什至尝试将这些数据存储在 session 中,但我无法让任何东西发挥作用。我一直在寻找答案,但找不到任何答案。这很可能是因为我是 Django 新手,可能不理解我找到的一些信息。

class CopyClassEnrollmentForm1(forms.Form):
    original_semester=forms.ModelChoiceField(queryset=Semester.objects.filter(is_active=True))
    new_semester=forms.ModelChoiceField(queryset=Semester.objects.filter(is_active=True))

class CopyClassEnrollmentForm2(forms.Form):
    original_class = forms.ModelChoiceField(queryset=Schedule.objects.filter(), empty_label=None)
    new_class = forms.ModelChoiceField(queryset=Schedule.objects.filter(), empty_label=None)

    def __init__(self, request, *args, **kwargs):
        super (CopyClassEnrollmentForm2,self).__init__(*args,**kwargs)
        self.fields['original_class'].queryset = Schedule.objects.filter(semester=original_semester)

@staff_member_required
def copy_class_enrollment1(request):
    form = CopyClassEnrollmentForm1(request.POST)
    if request.method == 'POST' and form.is_valid():
        request.session['original_semester'] = form.cleaned_data['original_semester']
        request.session['new_semester'] = form.cleaned_data['new_semester']
        return HttpResponseRedirect(reverse('copy_class_enrollment2'))

    else:
        form = CopyClassEnrollmentForm1()

    return render(request, "school/admin/copy_class_enrollment1.html", { 'form': form,})



def copy_class_enrollment2(request):
    form = CopyClassEnrollmentForm2(request.POST)
    if request.method == 'POST' and form.is_valid():
        original_semester = request.session['original_semester']
        new_semester = request.session['new_semester']
        original_semester = form.cleaned_data['original_semester']
        new_semester = form.cleaned_data['new_semester']

    else:
        form = CopyClassEnrollmentForm2()

    return render(request, "school/admin/copy_class_enrollment2.html", { 'form': form,})

最佳答案

在第二个 View 中,您执行的操作顺序错误。您需要将 session 中的值传递到表单中,并且表单必须从 kwargs 中获取值:

class CopyClassEnrollmentForm2(forms.Form):
    original_class = forms.ModelChoiceField(queryset=Schedule.objects.filter(), empty_label=None)
    new_class = forms.ModelChoiceField(queryset=Schedule.objects.filter(), empty_label=None)

    def __init__(self, *args, **kwargs):
        original_semester = kwargs.pop('original_semester')
        new_semester = kwargs.pop('new_semester')
        super (CopyClassEnrollmentForm2,self).__init__(*args,**kwargs)
        self.fields['original_class'].queryset = Schedule.objects.filter(semester=original_semester)

def copy_class_enrollment2(request):
    original_semester = request.session['original_semester']
    new_semester = request.session['new_semester']

    if request.method == 'POST':
        form = CopyClassEnrollmentForm2(request.POST, original_semester=original_semester, new_semester=new_semester)
        if form.is_valid():
            # do something
    else:
        form = CopyClassEnrollmentForm2(original_semester=original_semester, new_semester=new_semester)

    return render(request, "school/admin/copy_class_enrollment2.html", { 'form': form,})

关于html - django表单发布到另一个表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27405347/

相关文章:

ruby-on-rails - 不允许的参数 : nested forms

html - 如何在 Jade 中更改页面的背景颜色?

javascript - 如何让背景可点击?

python - Django 检查用户何时创建

css - 如何在 XHTML 中制作按钮计票

javascript - 谷歌地图 : get route, 公里,和...价格

php - 表单未将数据传递到数据库但没有错误 Laravel 5.8.22

html - 如何在另一个模糊图像上添加图像

python - Django 模型类在管理器中为 None

javascript - 解析通过ajax返回的多个json列表