在Django中从手动呈现的表单获取合理的数据

在Django中从手动呈现的表单获取合理的数据,django,django-forms,django-views,Django,Django Forms,Django Views,我使用Django模板手动呈现以下表单。“手动呈现”是指代码中没有相应的表单或ModelForm对象(不使用表单对象的原因/细节有点复杂,可以安全地排除在这个问题之外)。我现在有一个思维障碍,我似乎不知道如何在Django视图中以可用的形式获取这些数据。具体来说,在发布表单时,如何获取每个员工的考勤值和考勤备注 <form> <table> <thead> <tr> <th>Sl</

我使用Django模板手动呈现以下表单。“手动呈现”是指代码中没有相应的表单或ModelForm对象(不使用表单对象的原因/细节有点复杂,可以安全地排除在这个问题之外)。我现在有一个思维障碍,我似乎不知道如何在Django视图中以可用的形式获取这些数据。具体来说,在发布表单时,如何获取每个
员工的
考勤值
考勤备注

<form>
<table>
    <thead>
        <tr>
            <th>Sl</th>
            <th>Worker</th>
            <th>Worker's Gender</th>
            <th>Work</th>
            <th>Unit cost of work</th>
            <th>Job</th>
            <th>Attendance</th> {# 1 or less if unit is day, 8 or less if unit is hours #}
            <th>Remarks</th> {# if any #}
        </tr>
    </thead>
    <tbody>
    {% for result in results %}
        <tr>
            <th>{{ forloop.counter }}</th>
            <td>{{ result.worker.name }} <input type="hidden" name="workers_pks" value="{{ result.worker.pk }}" id="id_workers_pks_{{ forloop.counter }}"></td>
            <td>{{ result.worker.get_gender_display }}</td>
            <td>{{ result.work.name }}</td>
            <td>{{ result.work.unit_cost }} per {{ result.work.work_unit }}</td>
            <td>{{ result.job_handover.job.name }}</td>
            <td>
                <input type='text' name='attendance_value' id='id_attendance_value_{{ forloop.counter }}' />
            </td>
            <td>
                <input type='text' name='attendance_remarks' id='id_attendance_remarks_{{ forloop.counter }}' />
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
</form>

Sl
工人
工人性别
工作
单位工程成本
工作
出席人数{#如果单位为天,则不超过1人;如果单位为小时,则不超过8人}
备注{如有}
{结果中的结果为%}
{{forloop.counter}}
{{result.worker.name}
{{result.worker.get_gender_display}
{{result.work.name}
{{result.work.unit_cost}}每{{{result.work.work_unit}}
{{result.job_handover.job.name}
{%endfor%}
我只是想澄清一下,我知道我可以通过以下方式获得价值观

workers=request.POST.getlist('workers\u pks')

attention\u values=request.POST.getlist('attention\u values')

attention\u comments=request.POST.getlist('attention\u comments')


我主要关心的是如何为每个相应的
工人\u PK

获取适当的
考勤值和
考勤备注
。使用请求对象的POST属性-

def your_view(request):
    #...
    if attendence_value in request.POST:
        at_value = request.POST['attendence_value']
然而,我看到有许多输入具有相同的name属性(浏览器将使用输入名称作为键来构造post数据)。你需要改变这一点。我的记忆是,当django这样做时(使用formset),它会在每个名称中添加一个前缀,以便识别输入属于哪个对象。我看你已经在身份证上做过了

更新

如何将
worker.pk
添加到您的
name
属性中-

<input type='text' name='attendance_value{{ result.worker.pk }}'>

您可能需要使用不同的循环(可能需要通过输入进行循环)。但是你明白了。

使用请求对象的POST属性-

def your_view(request):
    #...
    if attendence_value in request.POST:
        at_value = request.POST['attendence_value']
然而,我看到有许多输入具有相同的name属性(浏览器将使用输入名称作为键来构造post数据)。你需要改变这一点。我的记忆是,当django这样做时(使用formset),它会在每个名称中添加一个前缀,以便识别输入属于哪个对象。我看你已经在身份证上做过了

更新

如何将
worker.pk
添加到您的
name
属性中-

<input type='text' name='attendance_value{{ result.worker.pk }}'>

您可能需要使用不同的循环(可能需要通过输入进行循环)。但是你明白了。

是的,我的意思是如果我在循环中有100次迭代,我如何获得每个
工人的
出勤值
出勤备注
respectively@AidanEwen
name='attention\\ U值[{{result.worker.pk}}]如何“
?@AidanEwen这肯定会奏效-我在寻找其他东西,比如理解或功能解决方案,但我会同意你的答案。是的,我的意思是如果我有100次循环,如何获取每个
员工的
考勤值
考勤备注
respectively@AidanEwen那么
name='attention\u value[{{result.worker.pk}}}]
呢?@AidanEwen肯定会有用的-我在寻找其他东西,比如理解或功能解决方案,但我会同意你的答案。为什么不使用表格集呢?为什么不使用表单集呢?