0
注:Django的/ Python的初學者,希望這個問題是清楚的Django的 - 創建表單編輯模型的多個實例
我需要創造一個模型的多個實例可以同時在一個單一的形式編輯的形式,並同時提交。
例如,我有兩個模型,Invite和Guest,其中多個Guests可以與單個Invite關聯。我需要一張表單,可以在其中編輯與邀請相關的所有嘉賓的特定詳細信息,同時提交併保存到數據庫。
我見過關於使用crispy-forms的一些建議,但還沒有設法使它工作。
我已經創建了一個提供一定的輸入形式:
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>
任何意見
https://docs.djangoproject.com/es/1.9/topics/forms/formsets/ –