【问题标题】:#SOLVED How to get selected value in dropdown list, then pass it to views.py#SOLVED 如何在下拉列表中获取选定的值,然后将其传递给views.py
【发布时间】:2020-03-23 10:48:34
【问题描述】:

我正在开发带有下拉和 dropzone 的上传文件功能。但是,每当我提交带有所选选项的上传文件时,它总是说所选选项为无。在views.py 中打印nama_bimbingan 后,我发现它没有。这是我的代码。

url.py

....
url(r'bimbingan/add/upload', mengelola_bimbingan.upload_data_bimbingan, name='add-bimbingan-excel'),
url(r'bimbingan/download-template/', mengelola_bimbingan.bimbingan_template, name='bimbingan-template'),
....

forms.py

class UploadBimbinganForm(forms.Form):
    ...
    ...
    dropdown_choices = tuple(zip(all_pembimbing, all_pembimbing))
    nama_pembimbing = forms.ChoiceField(choices = dropdown_choices)

上传_bimbingan.html

<form method="POST" action="{% url 'app:add-bimbingan-excel' %}" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="py-3">
        <label for="id_nama_pembimbing"> Nama Pembimbing Akademik: </label>
        <select class="form-control mb-2" id="id_nama_pembimbing" name="nama_pembimbing" required>
            <option value = "" selected="selected">---------</option>
            <option value = {{form.nama_pembimbing}}></option>
        </select>
    </div>

    <div id="myDropzone" class="dropzone" drop-zone>
        <h6 class="dz-message"> Drop file here or click to upload</h6>
    </div>

    <div class="py-3">
        <a href="{% url 'app:bimbingan-template' %}">Download Template</a><br>
        <div class="row justify-content-between py-3">
            <div class="col-md-5 mb-1">
                <a href="{% url 'app:read-all-bimbingan' %}" class="btn btn-blue-outlined">Batal</a
            </div>
            <div class="col-md-5">
                <input type="submit" value="Simpan" class="btn btn-block btn-blue">
            </div>
        </div>
    </div>
</form>

views.py

@login_required(redirect_field_name='index')
@user_passes_test(only_admin_access)
def upload_data_bimbingan(request):
    form = UploadBimbinganForm(request.POST or None)
    if request.method == "POST" and 'file' in request.FILES:
        nama_pembimbing = request.POST.get('nama_pembimbing') 
        excel_file = request.FILES["file"]
        data = get_data(excel_file, column_limit=1)
        bimbingans = data["Bimbingan"]
        ...
        ...  
        if(len(duplicate) == 0):
            space_parsed_query = nama_pembimbing.replace(' ', '%20')
            cleaned_query = space_parsed_query.replace(',', '%2C')
            nip_pembimbing = int(get_data_dosen_by_nama(cleaned_query)[0]["nomor"])

            for bimbingan in bimbingans:
                if(bimbingan[0] != "NPM"):
                    new_bimbingan = Bimbingan(nip_pembimbing=nip_pembimbing, npm_mahasiswa=bimbingan[0])
                    new_bimbingan.save()
            return redirect('/app/bimbingan')
        else:
            ...
            ...
            return redirect('/app/bimbingan')
    else:
        context={
            "form": form
        }
        return render(request, 'app/mengelola_bimbingan/upload_bimbingan.html', context)

我已经尝试在 views.py 中使用 nama_pembimbing = form.cleaned_data["nama_pembimbing"],但是由于 form.is_valid() 总是返回 false,所以它仍然无法正常工作,所以我将其删除。我为此使用 django 和 python,并且 purpusely 不使用 javascript 来处理上传的文件和选定的选项。我真的希望有人可以帮助我解决这个问题。提前谢谢!

【问题讨论】:

  • 选择这个&lt;option value = {{form.nama_pembimbing}}&gt;&lt;/option&gt; 选项是给你None ?
  • 是的。选项列表可以以 HTML 格式显示。但是,当单击提交按钮时,当我尝试在 views.py 中打印时,“nama_pembimbing”字段为无。
  • 你应该引用值" &lt;option value="{{form.nama_pembimbing}}"&gt;
  • 在 devtools 中你能看到下拉列表的值吗?对于第一个选项,它是一个空字符串。第二个选项有什么价值吗?
  • @hedgie 谢谢你的回答。但不幸的是,它仍然无法正常工作。

标签: python html django drag-and-drop dropdown


【解决方案1】:

我认为您的 html 代码的这一部分只是搞砸了。

<select class="form-control mb-2" id="id_nama_pembimbing" name="nama_pembimbing" required>
    <option value = "" selected="selected">---------</option>
    <option value = {{form.nama_pembimbing}}></option>
</select>

我建议你不要在 html 属性和它的值之间添加空格。所以,它应该是这样的:

<select class="form-control mb-2" id="id_nama_pembimbing" name="nama_pembimbing" required>
    <option value="" selected="selected">---------</option>
    <option value="{{form.nama_pembimbing}}">{{form.nama_pembimbing}}</option>
</select>

【讨论】:

    【解决方案2】:

    我已经为这个问题找到了解决方案。问题出在dropzone上。我试图删除 dropzone 并且可以在视图中检索从下拉列表中选择的值。所以,要解决这个问题,我需要在我的 dropzone 脚本中添加以下代码。

    init: function() {
        dzClosure = this;
        this.on("sending", function(data, xhr, formData) {
           formData.append("nama_pembimbing", jQuery("#id_nama_pembimbing").val());
        });
    }
    

    就是这样,它应该很好地发挥作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多