向Djang中的URL传递下拉值

2024-05-02 05:45:03 发布

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

我正在呈现一个显示整数列表的下拉列表。这是窗体/视图中唯一的字段。提交表单后,所选的整数应传递给提交上一个表单时呈现的下一个视图的URL。你知道吗

我尝试这个的时候得到了404。你知道吗

以下是我目前正在尝试的:

你知道吗表单.py你知道吗

#this is the dropdown field
class ManifestDropDown(forms.Form):
    reference = forms.ModelChoiceField(queryset=Orders.objects.values_list('reference', flat=True).distinct(),
    empty_label=None)

你知道吗视图.py你知道吗

#this is the view where the dropdown is submitted
def manifest_references(request):
    if request.method == 'POST':
        form = ManifestDropDown(request.POST)
        if form.is_valid():
            reference_id = form.cleaned_data.get('reference')
            form.save()
            return render('manifest', reference_id=reference_id)

    query_results = Orders.objects.all()
    reference_list = ManifestDropDown()

    context = {
        'query_results': query_results,
        'reference_list': reference_list,
    }
    return render(request, 'manifest_references.html', context)


#this is the view where the value should be displayed in the url
def manifest(request, reference_id):
    form = CreateManifestForm(request.POST)

    if request.method == "POST":
        ....



    data = Manifests.objects.all().filter(reference__reference=reference_id)
    form = CreateManifestForm(initial={

         'reference': Orders.objects.get(reference=reference_id),

         })
    total_cases = Manifests.objects.filter(reference__reference=reference_id).aggregate(Sum('cases'))

    context = {
    'reference_id': reference_id,
    'form': form,
    'data': data,
    'total_cases': total_cases['cases__sum'],

     }

    return render(request, 'manifest_readonly.html', context)

你知道吗网址.py你知道吗

#url which displays the manifest view above
url(r'^manifest/(?P<reference_id>\d+)/$', manifest, name='manifest'),

url(r'^references_manifests', manifest_references, name='references_manifests'),

舱单_参考.html你知道吗

<div class="container">

  <br>
  <br>
  <br>

  <form method="POST" action="references_manifests">

    {% csrf_token %}
    {{ reference_list }}

    <button type="submit" class="btn btn-primary" name="button">Create Proforma</button>
  </form>

</div>

Tags: theformidurldataobjectsisrequest
2条回答

要动态更改您实际提交到的URL,您需要使用JavaScript。你知道吗

但另一种方法是提交回manifest_references视图,然后从那里重定向到manifest。(注意,无论如何,在成功提交后,您应该始终重定向,而不是呈现。而且不需要调用form.save(),这不是一个模型表单,因此没有什么可保存的。)

def manifest_references(request):
    if request.method == 'POST':
        form = ManifestDropDown(request.POST)
        if form.is_valid():
            reference_id = form.cleaned_data.get('reference')
            return redirect('manifest', reference_id=reference_id)

你可以做两件事:

  • 直接调用清单视图。你知道吗
  • 将用户重定向到清单页。你知道吗

第一个应该这样做:

if form.is_valid():
        reference_id = form.cleaned_data.get('reference')
        form.save()
        return manifest(request, reference_id)

第二个可以这样做:

if form.is_valid():
        reference_id = form.cleaned_data.get('reference')
        form.save()
        return HttpResponseRedirect(reverse('manifest', reference_id = reference_id))

你选择哪一个并不重要,尽管我建议将用户重定向到正确的页面,因为这样刷新就不会重新发送用户输入的表单。你知道吗

相关问题 更多 >