同じページに2つのモデルフォームがあります。同じページ、同じモデル、Formsetなしで2つのdjangoモデルフォーム
<form method="POST" action=""> {% csrf_token %}
{{ form1 }}
{{ form2 }}
<input type="submit" value="Save Selections"/>
</form>
.htmlのforms.py
class RegistrationForm(forms.ModelForm):
class Meta:
model = Registration
fields = ['event']
views.py
form1 = RegistrationForm(request.POST or None, instance=user_reg1)
form2 = RegistrationForm(request.POST or None, instance=user_reg2)
if request.method == 'POST':
if form1.is_valid() and form2.is_valid():
form1.save()
form2.save()
を:フォームは、選択された単一のフィールド、event
を有します表示形式とプロポーザルを作成する私は値を変更して保存ボタンを押すと、常に両方のインスタンスにform2選択を保存します。
私はDOMのidが同じである、と私は(この場合にはblock
)を登録モデルで一意のフィールドをつかんでDOM IDを変更することができましたことに気付きました
形。 PY
class RegistrationForm(forms.ModelForm):
class Meta:
model = Registration
fields = ['event']
def __init__(self, *args, **kwargs):
block = kwargs.pop('block') # a unique field in the Registration model
super(RegistrationForm, self).__init__(*args, **kwargs)
if block:
DOM_id = "event-" + str(block)
self.fields['event'].widget.attrs.update({'id': DOM_id, })
これはフィールドに一意のIDを与えているが、両方のフォームがまだ同じidを持つdiv要素に包含される:div_id_event
レンデ赤HTML
<form method="POST" action=""> <input type='hidden' name='csrfmiddlewaretoken' value='...' />
<div id="div_id_event" class="form-group">
<label for="event-Flex-1" class="control-label requiredField">Event<span class="asteriskField">*</span> </label>
<div class="controls ">
<select class="select form-control" id="event-Flex-1" name="event" required>
<option value="">---------</option>
<option value="10">stuff</option>
...
</select>
</div>
</div>
<div id="div_id_event" class="form-group">
<label for="event-Flex-2" class="control-label requiredField">
Event<span class="asteriskField">*</span> </label>
<div class="controls ">
<select class="select form-control" id="event-Flex-2" name="event" required>
<option value="">---------</option>
<option value="10">stuff</option>
....
</select>
</div>
</div>
<input type="submit" value="Save Selections"/>
</form>
のid事項あれば私も知りません。 Formsetを使わずにこれら2つのフォームを協力させる方法がありますか?