在djang的表单中多次出现同一行

2024-10-02 14:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个表单,用户可以通过该表单输入有关某些费用的详细信息,但我希望表单中的同一行一次又一次,但找不到如何做到这一点:

enter image description here

如果您看到上面的图,这个表单适用于1行数据,保存得很好,但是超过1行就不行了。有人能提出什么办法吗。代码如下:

在模型.py在

from django.db import models


class Expenditure(models.Model):
    exp_date = models.DateField("Expenditure_Date")
    description = models.CharField(max_length=500)
    amount = models.FloatField(default=0)
    currency = models.CharField(max_length=15,default="USD")

    class Meta:
        unique_together = ('exp_date', 'description',)

    def __unicode__(self):
        return self.description

在表单.py在

^{pr2}$

在视图.py在

from django.template import RequestContext
from django.shortcuts import render_to_response
from moni.models import Expenditure
from moni.forms import ExpenditureForm

def add_expenditure(request):
    context = RequestContext(request)

    if request.method == 'POST':
        form = ExpenditureForm(request.POST)

        if form.is_valid():

            form.save(commit=True)
            return index(request)
        else:

            print form.errors
    else:

        form = ExpenditureForm()


    return render_to_response('moni/add_expenditure.html', {'form': form}, context)

添加_支出.html在

{% extends 'moni/base.html' %}

{% block title %}Add Shipment {% endblock %}

{% block body_block %}
        <h1>Add a Expenditure</h1>
        <p id="p_hide"> I am a paragraph to be hidden</p>
        <button id ="btn1">Hide Paragraph</button>

        <form id="expenditure_form" method="post" class="vDateField" action="/moni/add_expenditure/">

            {% csrf_token %}

            <table border=1>
                <tr><th><label >Date:</label></th> <th><label for="id_description">Description:</label></th><th><label for="id_amount">Amount:</label></th></tr>
            <tr><td><input class="vDateField"  name="exp_date" size="10" type="text" /></td><td>{{form.description}}</td><td>{{form.amount}}<input id="id_currency" name="currency" type="hidden" value="MYR" /></td></tr>
            <tr><td><input class="vDateField"  name="exp_date" size="10" type="text" /></td><td>{{form.description}}</td><td>{{form.amount}}<input id="id_currency" name="currency" type="hidden" value="MYR" /></td></tr>
        </table>
        <input type="submit" name="submit" value="Create Expenditure" />
    </form>
{% endblock %}

Tags: fromimportformid表单modelsdescriptionlabel
2条回答

对于useformeset函数,这里是多次打印表单的想法

 ExpenditureFormSet = formset_factory(ExpenditureForm, extra=3,)

以及类似的观点

^{pr2}$

并将其传递到{formset},这样html将打印额外的3个表单

您应该使用ModelFormSets而不是ModelForm。 如果要动态添加表单,请使用相应的JavaScript插件(因为每次添加新表单时都应该更改管理表单)。在

相关问题 更多 >