Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-创建用于编辑模型多个实例的表单_Python_Django_Forms - Fatal编程技术网

Python Django-创建用于编辑模型多个实例的表单

Python Django-创建用于编辑模型多个实例的表单,python,django,forms,Python,Django,Forms,注意:Django/Python初学者,希望这个问题很清楚 我需要创建一个表单,其中一个模型的多个实例可以在一个表单中一次编辑,并同时提交 例如,我有两个模型,Invite和Guest,其中多个来宾可以与单个Invite关联。我需要一个单一的表单,在这里我可以编辑附加到邀请的所有客人的特定细节,同时提交,并保存到数据库中 我已经看到了一些关于使用的建议,但还没有成功地使其发挥作用 我创建了一个表单,提供了某些输入: from django import forms from app.models

注意:Django/Python初学者,希望这个问题很清楚

我需要创建一个表单,其中一个模型的多个实例可以在一个表单中一次编辑,并同时提交

例如,我有两个模型,Invite和Guest,其中多个来宾可以与单个Invite关联。我需要一个单一的表单,在这里我可以编辑附加到邀请的所有客人的特定细节,同时提交,并保存到数据库中

我已经看到了一些关于使用的建议,但还没有成功地使其发挥作用

我创建了一个表单,提供了某些输入:

from django import forms
from app.models import Guest


class ExtraForm(forms.ModelForm):
    diet = forms.CharField(max_length=128, required=False)
    transport = forms.BooleanField(initial=False)

    # An inline class to provide additional information on the form.
    class Meta:
        # Provide an association between the ModelForm and a model
        model = Guest
        fields = ('diet', 'transport')
我的观点包括:

def extra_view(request, code):
    invite = get_invite(code)
    # Get the context from the request.
    context = RequestContext(request)

    # Get just guests labelled as attending
    guests_attending = invite.guest_set.filter(attending=True)

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

        print(form.data)

        # Have we been provided with a valid form?
        if form.is_valid():
            # Save the new category to the database.
            # form.save(commit=True)

            print(form)

            return render(request, 'weddingapp/confirm.html', {
                'invite': invite,
            })
        else:
            # The supplied form contained errors - just print them to the terminal for now
            print form.errors
    else:
        # # If the request was not a POST, display the form to enter details.
        GuestForm = ExtraForm()

    return render_to_response('weddingapp/extra.html', 
           {'GuestForm': GuestForm, 'invite': invite, 'guests_attending': guests_attending}, context)
最后,我的表格:

<form id="extra_form" method="post" action="{% url 'weddingapp:extra' invite.code %}">

    {% csrf_token %}

    {% for guest in guests_attending %}
        <fieldset class="form-group">
            <h3>Form for {{ guest.guest_name }}</h3>
            {% for field in GuestForm.visible_fields %}
                {{ field.errors }}

                <div>
                    {{ field.help_text }}
                    {{ field }}
                </div>
            {% endfor %}
        </fieldset>
    {% endfor %}

    {{ form.management_form }}
    <table>
        {% for form in form %}
            {{ form }}
        {% endfor %}
    </table>

    <input type="submit" name="submit" value="Submit"/>
</form>

{%csrf_令牌%}
{来宾中的来宾占%}
{{guest.guest_name}的表格
{GuestForm.visible_fields%}
{{field.errors}}
{{field.help_text}
{{field}}
{%endfor%}
{%endfor%}
{{form.management_form}}
{表格%中的表格为%}
{{form}}
{%endfor%}

任何建议

您需要使用
表单集
,尤其是:

在您看来,您可以将其用作标准形式:

formset = GuestFormSet(data=request.POST)

if formset.is_valid():
  formset.save()
在模板中:

   <form method="post" action="">
     {{ formset.management_form }}
       <table>
         {% for form in formset %}
           {{ form }}
         {% endfor %}
       </table>
   </form>
使用简单的快捷方式:

form = ExtraForm(data=request.POST or None)
if form.is_valid():
  ...

您需要使用
表单集
,尤其是:

在您看来,您可以将其用作标准形式:

formset = GuestFormSet(data=request.POST)

if formset.is_valid():
  formset.save()
在模板中:

   <form method="post" action="">
     {{ formset.management_form }}
       <table>
         {% for form in formset %}
           {{ form }}
         {% endfor %}
       </table>
   </form>
使用简单的快捷方式:

form = ExtraForm(data=request.POST or None)
if form.is_valid():
  ...