#python #html #django #drop-down-menu #dropdown
#python #HTML #django #выпадающее меню #выпадающий
Вопрос:
Я хочу создать выпадающий список в шаблоне, где значения выпадающего списка берутся из поля (ссылки) в моей модели заказов в models.py
. Я понимаю, что создание выпадающего списка, в котором значения задаются статически, но поскольку я хочу заполнить значения, хранящиеся в БД, я не уверен, с чего начать.
Я создал модель и попытался поиграть с 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.
Ответ №1:
Используете ли вы Materialize CSS? Если да, то Django forms отображает выпадающие списки иначе, чем ожидает 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. Вы также можете передавать любые теги имен в атрибутах.