English 中文(简体)
是否可能在Django表格中增加一行?
原标题:Is it possible to add a single row to a Django form?

我的表格大致如下:

class aForm(forms.Form):
  input1 = forms.CharField()
  input2 = forms.CharField()
  input3 = forms.CharField()

我想要做的是,当用户点击“提供另一个投入3”时,在表格中增加额外的投入3。

我在阅读了一整套方法,让我以表格形式添加新的形式,但我不想用新的形式,我想补充新的投入3。

这是可能的吗?

最佳回答

增加有活力的田地的做法超过了常规方法。

与此类似:

class aForm(forms.Form):
  input1 = forms.CharField()
  input2 = forms.CharField()

  def __init__(self, addfields=0, *args, **kwargs):
    super(aForm, self).__init__(*args, **kwargs)

    #add new fields
    for i in range(3,addfields+3)
       self.fields[ input%d  % i] = forms.CharField()
问题回答

我将按您的形式定义界定<代码>input3,而不是要求,然后在违约时加以掩盖。 用户然后可以使用 Java本显示投入。

如果你想让用户增加未界定的额外投入,我将进一步研究表格。

也许像这样:

from django import forms
from django.utils.datastructures import SortedDict
def some_view(request):
    data = {}

    # Using session to remember the row count for simplicity
    if not request.session.get( form_rows , None):
        request.session[ form_rows ] = 3

    # If posted with add row button add one more row
    if request.method ==  POST  and request.POST.get( rows , None):
            request.session[ form_rows ] += 1
            data = request.POST

    # Create appropriate number of form fields on the fly
    fields = SortedDict()
    for row in xrange(1, request.session[ form_rows ]):
        fields[ value_{0} .format(row)] = forms.IntegerField()

    # Create form class
    MyForm = type( MyForm , (forms.BaseForm,), {  base_fields : fields })

    form = MyForm(initial=data)

    # When submitted...
    if request.method ==  POST  and not request.POST.get( rows , None):
        form = MyForm(request.POST)
        if form.is_valid():
            # do something
    return render_to_response( some_template.html , {
         form :form,
    }, context_instance=RequestContext(request))

模板:

<form action="" method="post">
    {{ form }}
    <input type="submit" />
    <input type="submit" value= Add  name= rows  />
</form>

这过于简化,但行之有效。

你可以很容易地修改这一榜样,以便你能够利用美国宇宙航空研究开发机构提出请求,并用新的方式取代旧形式。





相关问题
Can Django models use MySQL functions?

Is there a way to force Django models to pass a field to a MySQL function every time the model data is read or loaded? To clarify what I mean in SQL, I want the Django model to produce something like ...

An enterprise scheduler for python (like quartz)

I am looking for an enterprise tasks scheduler for python, like quartz is for Java. Requirements: Persistent: if the process restarts or the machine restarts, then all the jobs must stay there and ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

What is suggested seed value to use with random.seed()?

Simple enough question: I m using python random module to generate random integers. I want to know what is the suggested value to use with the random.seed() function? Currently I am letting this ...

How can I make the PyDev editor selectively ignore errors?

I m using PyDev under Eclipse to write some Jython code. I ve got numerous instances where I need to do something like this: import com.work.project.component.client.Interface.ISubInterface as ...

How do I profile `paster serve` s startup time?

Python s paster serve app.ini is taking longer than I would like to be ready for the first request. I know how to profile requests with middleware, but how do I profile the initialization time? I ...

Pragmatically adding give-aways/freebies to an online store

Our business currently has an online store and recently we ve been offering free specials to our customers. Right now, we simply display the special and give the buyer a notice stating we will add the ...

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签