簡體   English   中英

在Django中的表單中多次出現同一行

[英]same row multiple times in a form in django

有一個表格,用戶可以通過該表格輸入有關一些費用的詳細信息,但是我想一次又一次地在表格中有相同的行,但找不到如何做到這一點:

在此處輸入圖片說明

如果您看到上面的圖,此表格適用於1行數據,可以很好地保存,但超過1行則不能。 有人可以建議任何方式做到這一點。 以下是代碼:

models.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

forms.py

from django import forms
from moni.models import Expenditure
from django.contrib.admin.widgets import AdminDateWidget


class ExpenditureForm(forms.ModelForm):
    #exp_date = forms.DateField(help_text="Date")
    exp_date = forms.DateField(widget=AdminDateWidget)
    description = forms.CharField(max_length=500)
    amount = forms.FloatField(initial=0)
    currency = forms.CharField(widget=forms.HiddenInput(), initial="USD")

    # An inline class to provide additional information on the form.
    class Meta:
        # Provide an association between the ModelForm and a model
        model = Expenditure
        fields = ('exp_date', 'amount', 'description')

views.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)

add_expenditure.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 %}

您應該使用ModelFormSets而不是ModelForm。 而且,如果要動態添加表單,請使用相應的JavaScript插件(因為每次添加新表單時都應更改管理表單)。

為此,請使用Formeset函數,這是多次打印表格的想法

 ExpenditureFormSet = formset_factory(ExpenditureForm, extra=3,)

和類似的意見

if formset.is_valid():
            for data in formset.cleaned_data:

並將其傳遞到{formset}因此html將打印出另外3種形式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM