【问题标题】:Django form: select field after the submit of the formDjango表单:表单提交后选择字段
【发布时间】:2015-11-04 21:51:02
【问题描述】:

我有一个报告表格report.html:

<select id="select" class="form-control" name="organization">
        <option value="">-- Select Organization --</option>
        {% for organization in organization_list %}
        <option value="{{ organization.name }}">{{ organization.name }}</option>
        {% endfor %}
</select>

提交此表单后,所选组织未保存。但是如果能显示组织就更好了。这可能对用户有帮助:她/他可以看到哪些过滤器显示这些结果。

表单提交选择字段的选定值后如何保存和显示?

views.py:

def report(request):

    user = request.user
    admin = None
    try:
        admin = user.administrator
    except ObjectDoesNotExist:
        pass
    if not admin:
        return render(request, 'vms/no_admin_rights.html')

    organization_list = get_organizations_ordered_by_name()

    if request.method == 'POST':
        form = ReportForm(request.POST)
        if form.is_valid():
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            organization = form.cleaned_data['organization']
            event_name = form.cleaned_data['event_name']
            job_name = form.cleaned_data['job_name']
            start_date = form.cleaned_data['start_date']
            end_date = form.cleaned_data['end_date']
            report_list = get_administrator_report(
                first_name,
                last_name,
                organization,
                event_name,
                job_name,
                start_date,
                end_date
                )
            total_hours = calculate_total_report_hours(report_list)
            return render(request, 'administrator/report.html', {'form': form, 'report_list': report_list, 'total_hours': total_hours, 'notification': True, 'organization_list': organization_list})
        else:
            return render(request, 'administrator/report.html', {'form': form, 'notification': False, 'organization_list': organization_list})
    else:
        form = ReportForm()
        return render(request, 'administrator/report.html', {'form': form, 'notification': False, 'organization_list': organization_list})

forms.py:

class ReportForm(forms.Form):
    first_name = forms.RegexField(regex=r'^[(A-Z)|(a-z)|(\s)]+$', max_length=30, required=False)
    last_name = forms.RegexField(regex=r'^[(A-Z)|(a-z)|(\s)]+$', max_length=30, required=False)
    organization = forms.RegexField(regex=r'^[(A-Z)|(a-z)|(\s)]+$', max_length=75, required=False)
    event_name = forms.RegexField(regex=r'^[(A-Z)|(a-z)|(0-9)|(\s)|(\.)|(,)|(\-)|(!)]+$', max_length=75, required=False)
    job_name = forms.RegexField(regex=r'^[(A-Z)|(a-z)|(\s)]+$', max_length=75, required=False)
    start_date = forms.DateField(required=False)
    end_date = forms.DateField(required=False)

【问题讨论】:

    标签: python django forms select


    【解决方案1】:

    改变这一行:

    return render(request, 'administrator/report.html', {'form': form, 'report_list': report_list, 'total_hours': total_hours, 'notification': True, 'organization_list': organization_list})
    

    添加到上下文'selected_organization': organization

    return render(request, 'administrator/report.html', {'form': form, 'report_list': report_list, 'total_hours': total_hours, 'notification': True, 'organization_list': organization_list, 'selected_organization': organization})
    

    报告表格应该是这样的:

    <select id="select" class="form-control" name="organization">
        <option value="">-- Select Organization --</option>
        {% for organization in organization_list %}
        <option value="{{ organization.name }}" {% if selected_organization == organization %}selected{% endif %}>{{ organization.name }}</option>
        {% endfor %}
    </select>
    

    【讨论】:

    • 非常感谢!它有帮助
    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多