django formsets can_delete header

时间:2014-07-25 06:07:54

标签: python django django-forms

我是django的新手,请耐心等待。

使用django formsets创建了一个模板,除了我无法给can_delete列提供标题外,它的工作方式都很好。

我的Django views.py看起来像:

def add_expenditure(request):
    context = RequestContext(request)
    ExpFormSet = modelformset_factory(Expenditure,extra=1,max_num=10,fields=('exp_date', 'description','amount'),can_delete=True)

    if request.method == 'POST':
        formset = ExpFormSet(request.POST)
        if formset.is_valid():
            formset.save(commit=True)
            formset = ExpFormSet()
        else:
            print "errors in formset are ",formset.errors
    else:
        formset = ExpFormSet(queryset=Expenditure.objects.none())
    return render_to_response('moni/add_expenditure.html', {'formset':formset}, context)

模板形式代码如下:

<form id="expenditure_form" method="post"  action="/moni/add_expenditure/">
        {% csrf_token %}
        <table border=10>
            <tr>
                <th>Serial No.</th>
                <th><label >Date:</label></th>
                <th><label for="id_description">Description:</label></th>
                <th><label for="id_amount">Amount</label></th>
            </tr>

            {{ formset.management_form }}
            {% for form in formset %}
                <tr>
                    <td>{{forloop.counter}}</td>
                    {% for field in form %}
                        <td>  {{ field.class }} {{ field }}
                            {% if field.name == "exp_date" %}
                                 <a href="javascript:void(0)" class="todaylink" id= {{forloop.parentloop.counter0}}  >Today</a>
                            {% endif %}
                        </td>

                {% endfor %}
                </tr>
                <br>

            {% endfor %}

        </table>
        <input type="submit" name="submit" value="Create Expenditure" />
    </form>

和模板看起来像:

enter image description here

我想要的是还有一个删除标题复选框..就在金额旁边。我尝试添加一个标题,但似乎它没有按预期工作。有人可以提供任何建议..下面是添加一个标题

后的样子
    <form id="expenditure_form" method="post"  action="/moni/add_expenditure/">
        {% csrf_token %}
        <table border=10>
            <tr>
                <th>Serial No.</th>
                <th><label >Date:</label></th>
                <th><label for="id_description">Description:</label></th>
                <th><label for="id_amount">Amount</label></th>
                <th><label for="id_delete">Delete</label></th>
            </tr>

            {{ formset.management_form }}
            {% for form in formset %}
                <tr>
                    <td>{{forloop.counter}}</td>
                    {% for field in form %}
                        <td>  {{ field.class }} {{ field }}
                            {% if field.name == "exp_date" %}
                                 <a href="javascript:void(0)" class="todaylink" id= {{forloop.parentloop.counter0}}  >Today</a>
                            {% endif %}
                        </td>

                {% endfor %}
                </tr>
                <br>

            {% endfor %}

        </table>
        <input type="submit" name="submit" value="Create Expenditure" />
    </form>

enter image description here

有关如何在删除复选框上方创建此标题的任何建议吗?

1 个答案:

答案 0 :(得分:1)

问题是

{% for field in form %}
    <td>  {{ field.class }} {{ field }}
        {% if field.name == "exp_date" %}
        <a href="javascript:void(0)" class="todaylink" id= {{forloop.parentloop.counter0}}    >Today</a>
        {% endif %}
    </td>
{% endfor %}

这创建了5个TD,你在标题中有4个TD。

请试试这个

<tr>
            <th>Serial No.</th>
            <th><label >Date:</label></th>
            <th><label for="id_description">Description:</label></th>
            <th><label for="id_amount">Amount</label></th>
            <th></th>
            <th><label for="id_delete">Delete</label></th>
</tr>

您也可以在删除前删除元素复选框。