Ich habe eine Tabelle. Eine der Spalten ist eine Ankreuzfeldspalte, und ich möchte, dass das Formular gesendet wird, wenn das Kontrollkästchen "Checked" eines Kontrollkästchens geändert wird.Django - ein Formular Eingabefeld wird nicht gebucht
Ich habe dem Formular auch ein ausgeblendetes Eingabefeld hinzugefügt, damit ich feststellen kann, welches Kontrollkästchen sich geändert hat.
Ich habe es geschafft, das Formular zu erhalten, wenn ein Checkbox-Status geändert wird (mit JQuery), aber aus irgendeinem Grund wird das versteckte Eingabefeld nicht mitgeschickt.
Das einzige Ding in request.POST
in der Ansicht ist das csrf-Token.
<table class="bordered striped centered responsive-table">
<thead>
<tr>
<th data-field="season">Season</th>
<th data-field="episode">Episode</th>
<th data-field="title">Title</th>
<th data-field="date">Air Date</th>
<th data-field="watched">Watched</th>
</tr>
</thead>
<tbody>
{% for episode in episodes %}
<tr>
<td>{{ episode.season }}</td>
<td>{{ episode.number }}</td>
<td>{{ episode.title }}</td>
<td>{{ episode.date }}</td>
<td><form id='episodes' action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="hidden" id="episode_title" value="{{ episode.title }}"/>
<input type="checkbox" id="{{ episode.title }}" {% if episode.watched %}checked="checked" {% endif %}/>
<label for="{{ episode.title }}"></label>
</form>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<script type="text/javascript">
$(document).ready(function(){
$("#episodes").on("change", "input:checkbox", function(){
$("#episodes").submit();
});
});
</script>
EDIT I Tried @bfrederi ‚s Vorschlag. Hat sich nicht viel geändert. Das Formular wird nur mit dem csrf-Token gepostet.
<td><form id='episodes-{{ episode.title }}' action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<input type="hidden" id="episode_title" value="{{ episode.title }}"/>
<input type="checkbox" class="episode-check" id="{{ episode.title }}" {% if episode.watched %}checked="checked" {% endif %}/>
<label for="{{ episode.title }}"></label>
</form></td>
.
.
$(document).ready(function(){
$(".episode-check").change(function() {
this.closest('form').submit();
});
});
Das ist nur eine Vermutung, aber wenn man sich die Unterschiede in den Vorlagen ansieht, könnte es sein, dass Sie kein * angegeben haben. * Aktion ** in Ihrer ursprünglichen Vorlage (abhängig von Ihrem Browser). Es empfiehlt sich, immer eine relative/absolute URL in der ** Aktion ** anzugeben (wie in dieser Antwort). – bfrederix
Oder, vielleicht eher, könnte es sein, wie Django Ihr mehrteiliges Formular erhalten hat: https://docs.djangoproject.com/en/1.9/ref/forms/api/#testing-for-multipart-forms – bfrederix