我正在寻找在模板中创建一个下拉菜单,其中该下拉菜单的值来自models.py
中我的Orders模型中的字段(引用)。我知道会创建一个下拉列表,其中的值是静态设置的,但是由于我要填充数据库中存储的值,因此我不确定从哪里开始。
我已经创建了模型,并尝试使用views.py
,forms.py
和模板。我能够显示每个订单号,但没有显示在下拉列表中,而且我还在为如何编写模板而苦苦挣扎。
models.py
from django.db import models
class Orders(models.Model):
reference = models.CharField(max_length=50, blank=False)
ultimate_consignee = models.CharField(max_length=500)
ship_to = models.CharField(max_length=500)
def _str_(self):
return self.reference
forms.py
from django import forms
from .models import *
def references():
list_of_references = []
querySet = Orders.objects.all()
for orders in querySet:
list_of_references.append(orders.reference)
return list_of_references
class DropDownMenuReferences(forms.Form):
reference = forms.ChoiceField(choices=[(x) for x in references()])
views.py
def reference_view(request):
if request.method == "POST":
form = references(request.POST)
if form.is_valid():
form.save()
return redirect('index')
else:
form = references()
return render(request, 'proforma_select.html', {'form': form})
proforma_select.html
{% extends 'base.html' %}
{% block body %}
<div class="container">
<form method="POST">
<br>
{% for field in form %}
<div class="form-group row">
<label for="id_{{ field.name }}" class="col-2 col-form-label"> {{ field.label }}</label>
<div class="col-10">
{{ field }}
</div>
</div>
{% endfor %}
<button type="submit" class="btn btn-primary" name="button">Add Order</button>
</form>
</div>
{% endblock %}
渲染模板时得到的所有内容都是列出的每个参考编号,但不在下拉列表中。这使我相信我的问题主要出在模板上,但是我不确定是我刚接触Django。
答案 0 :(得分:0)
您是否正在使用Materialize CSS?如果是,则Django表单呈现的下拉菜单与Materialize期望的不同。因此,您将要覆盖表单窗口小部件。您可以这样做:
forms.py:
class DropDownMenuReferences(forms.Form):
reference = forms.ChoiceField(choices=[(x) for x in references()],
widget=forms.Select(choices=[(x) for x in references()], attrs={'class':
'browser-default'}))
这将覆盖传递到html中的参数。您也可以在attrs中传递任何名称标签。