Django 将模板中的多个复选框选择传递给表单

Django 将模板中的多个复选框选择传递给表单,django,django-forms,django-templates,Django,Django Forms,Django Templates,我刚到Django,我还在学习诀窍。我有以下模板,允许用户选择多个复选框。现在,我希望在用户按下按钮后将这些选项传递到新的url路径。如果我走错了方向,请让我知道并给出建议 <div class="container"> <div class="row"> <div class="col"> <h3>Financial</h3>

我刚到Django,我还在学习诀窍。我有以下模板,允许用户选择多个复选框。现在,我希望在用户按下按钮后将这些选项传递到新的url路径。如果我走错了方向,请让我知道并给出建议

<div class="container">

          <div class="row">
              <div class="col">
                <h3>Financial</h3>

                        <ul>
                        {% for app in fingrouplist %}
                        <li><input type="checkbox" name="request_reports" value ="{{app.report_id}}" >  {{ app.report_name_sc }}</li>
                        {% endfor %}
                        </ul>
              </div>
              <div class="col">

下面是一种使用JavaScript和JQuery AJAX将活动复选框通过电子邮件地址传递到Django后端的方法:

HTML:


您可以向任一响应添加任何内容,包括模板呈现;然后在前端,响应由ajax命令中的相应部分处理。

我是否必须包含任何用于ajax或Jquery的库?有没有更有效的方法只使用Django和表单?我看不出它填充表单的位置。是的,您必须包含JQuery库。按照这种做法,您根本不必使用django表单,而是使用视图。我会发布的。您可能需要进一步处理CSRF令牌;然而,这并不难。我相信在前端使用JS比使用django表单容易得多。当然,你也可以试试。当帖子出现问题时,按下我个人资料页面上的按钮,我的URL不会更改为requestaccess。我看到post请求进入accounts/requestaccess,但当我尝试打印request.post.get或getlist时,它是None或空列表。我在这里开始了一个新的线程:
</br></br>
<input class="btn btn-primary" type="button" value="Request Access">
def profile(request):
    owner = User.objects.get (formattedusername=request.user.formattedusername)
    reportdetail = QVReportAccess.objects.filter(ntname = owner.formattedusername, active = 1).values('report_name_sc')

    reportIds = QVReportAccess.objects.filter(ntname = owner.formattedusername).values_list('report_id', flat=True)
    reportaccess = QvReportList.objects.filter(report_id__in= reportIds).values_list('report_name_sc', flat = True)
    reportGroups = QVReportAccess.objects.filter(ntname = owner.formattedusername).values_list('report_group_id', flat=True)
    reportlist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).exclude(active=0)
    allreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 100)
    bhreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 200)
    cereportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 500)
    finreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 600)
    careportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 800)
    pireportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1100)
    screportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1200)
    dssreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1300)
    psgreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 1400)
    othreportgrouplist = QvReportList.objects.filter(~Q(report_id__in= reportIds)).filter(report_group_id = 99999)


    print(reportdetail)

    args = {'user':owner, 'applicationaccess':reportaccess, 'applicationlist':reportlist, 'bhgrouplist':bhreportgrouplist, 'cegrouplist':cereportgrouplist, 'fingrouplist':finreportgrouplist
          , 'cagrouplist':careportgrouplist, 'pigrouplist':pireportgrouplist, 'scgrouplist':screportgrouplist, 'dssgrouplist':dssreportgrouplist, 'psggrouplist':psgreportgrouplist
          , 'othgrouplist':othreportgrouplist, 'allgrouplist':allreportgrouplist}

    return render(request, 'accounts/profile.html', args)
{% for address in address_book %}
    <div id="address_row_{{ address }}" class="address"
         onclick="$(this).toggleClass('selected')>
        {{ address }}
    </div> {# YOU CAN CHANGE THESE TO CHECKBOXES OR WHATEVER #}
{% endfor %}

function sendEmails() { // REQUIRES A BUTTON OR TRIGGER
    let addresses = [];
    $('.address').each( function () {
        if ($(this).hasClass('selected')) {
            addresses.push(this.id.split('_')[2]);
        }
    });

    $.ajax({
        type: "POST",
        url: "{% url ' ... ' %}",
        data: {'addresses': JSON.stringify(addresses)},
        success: function (serverResponse_data) {
            console.log('sendEmails success: ' + serverResponse_data);
        },  
        error: function (serverResponse_data) {
                    console.log('error:' + JSON.stringify(serverResponse_data).split(',').join('\n'));
        }
   });
def ajax_email_to(request):
    if not request.is_ajax():
        return HttpResponse('SERVER RESPONSE ajax_email_to, Not an ajax call.')

str_addresses = request.POST.get("addresses", "missing")  # THIS HAS TO MATCH THE DICT KEY IN YOUR FRONT

if str_addresses != 'missing':

    # DO YOU STUFF
    
    return HttpResponse("SERVER RESPONSE SUCCESS")

return HttpResponse("SERVER RESPONSE ERROR")