Mein forms.py:Wie verwendet man zwei verschiedene Django-Form bei der gleichen Vorlage?
class AlertForm(forms.ModelForm):
class Meta:
model=Alert
fields = ('high','medium', 'user')
widgets = {
'user': forms.HiddenInput()
}
AlertCountFormset = modelformset_factory(Alert,
form = AlertForm)
Eine andere Klasse Django Form:
class NotifierForm(forms.ModelForm):
high = forms.ChoiceField(choices=NOTIFIER_TYPE)
medium = forms.ChoiceField(choices=NOTIFIER_TYPE)
low = forms.ChoiceField(choices=NOTIFIER_TYPE)
def save(self, commit=True):
alert = super(NotifierForm, self).save(commit=False)
alert.high = self.cleaned_data["high"]
alert.medium = self.cleaned_data["medium"]
alert.low = self.cleaned_data["low"]
alert.save()
return alert
class Meta:
model=Notifier
fields = ('high','medium', 'low', 'user')
widgets = {
'user': forms.HiddenInput()
}
NotifierFormset = modelformset_factory(Notifier,
form = NotifierForm)
Unten ist für die Auswahlfelder:
NOTIFIER_TYPE = (
(0, _('E-mail')),
(1, _('Skype')),
(2, _('IRC'))
)
ich diese beiden Formen auf dem gleichen füllen wollen Vorlage. So wähle ich gleiche Ansichten schreiben sowohl das heißt:
def profile_setting(request, slug):
if request.method == 'POST':
alert_form = AlertForm(request.POST)
notifier_form = NotifierForm(request.POST)
if alert_form.is_valid() and notifier_form.is_valid():
alert = alert_form.save(commit=False)
notifier = notifier_form.save(commit=False)
alert.user = request.user.username
notifier.user = request.user.username
notifier.save()
alert.save()
return HttpResponseRedirect(reverse('profile_setting', args=[slug]))
extra_context = {
'alert_form': AlertForm(),
'notifier_form': NotifierForm()
}
return direct_to_template(request,'users/user_profile_setting.html',
extra_context)
Nach dass in meinem template.html:
{% block content %}
<h3>{% trans "Alerts limit" %}</h3>
<form action="" method="POST">{% csrf_token %}
{{ alert_form.as_p }}
<input type="submit" value="{% trans 'Update' %}" />
</form>
<h3>{% trans "Notifier setting" %}</h3>
<form action="" method="POST">{% csrf_token %}
{{ notifier_form.as_p }}
<input type="submit" value="{% trans 'Update' %}" />
</form>
alles richtig ist, ist es die Daten in der Datenbank Speicher auch. Aber das Problem ist, wann immer ich das aler_form füllte und auf den update buttone klickte. es aktualisiert auch die andere Form mit dem gleichen Wert oder umgekehrt. Zum Beispiel, wenn ich wähle
1 2 3 for high , medium and low for alert_Form
Dann speichern Sie auch den gleichen Wert für notify_form. Warum passiert dies. Stimmt das nicht mit den Ansichten?
Abgesehen davon ändert sich. sollte ich Änderungen an der Template-Seite vornehmen oder nicht? –
Nein, Sie müssen keine Änderungen an der Vorlage vornehmen. – Alasdair
Nach dem Hinzufügen. Nichts passiert. Ich meine, kein Wert wird in die Datenbank eingegeben. Auch wenn es keinen Fehler gibt –