Django表单输入字段不会被发布

2024-09-26 22:54:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张桌子。其中一列是checkbox列,我希望每当checkbox的“checked”属性发生更改时都提交表单。在

我还向表单添加了一个隐藏的输入字段,这样我就可以知道哪个复选框发生了更改。在

我确实设法在复选框状态更改时(使用JQuery)提交表单,但是由于某些原因隐藏的输入字段没有被发布。在

视图中request.POST中的唯一内容是csrf令牌。在

<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>

编辑我尝试了@bfrederi的建议。变化不大。表格已过帐,但仅使用csrf令牌。在

^{pr2}$

Tags: formid表单fielddatatitletablecsrf
3条回答

好吧,所以我采用了一种完全不同的方法,对我的后代来说,这是一个很好的答案:)

我所做的就是创建一个新的url来发布,而不是发布到同一个url。
然后我只需在我的视图中为post函数提供更多参数。在

因此,同一视图的两个URL:

url(r'^show/(?P<show_name>.+)/episodes', ShowDetail.as_view(), name='show-detail'),
url(r'^show/(?P<show_name>.+)-(?P<episode_season>\d+)-(?P<episode_number>\d+)',
    ShowDetail.as_view(), name='show-detail-update')

然后在页面上,我简单地发布到新创建的url:

^{pr2}$

以及观点本身:

class ShowDetail(View):
    def get(self, request, show_name):
        # handling the get request

    def post(self, request, show_name, episode_season, episode_number):
        # handling the post request
        # referring the user the the same page
        return self.get(request, show_name)

感觉还是有点像黑客,但它很管用。在

如果有人有更好的建议,我很乐意听到。在

首先,创建了多个具有相同id的表单:

<form id='episodes' action="" method="post" enctype="multipart/form-data">

您可以完全放弃表单id而使用JQuery class selector

^{pr2}$

以及

$(".episode-check").change(function() {
    this.closest('form').submit();
}

…以访问父窗体元素like so。然后在正确的表单上调用submit(如果您提供表单id,您应该仍然具有唯一的id)。在

您可能需要参考this link来理解html元素是如何处理和通过请求对象传递的。在

相关问题 更多 >

    热门问题