簡體   English   中英

在Django中從模型創建下拉列表

[英]Creating Dropdown from Model in Django

我希望在模板中創建一個下拉列表,其中下拉列表的值來自models.py Orders模型中的字段(引用)。 我理解創建一個靜態設置值的下拉列表,但由於我希望填充存儲在數據庫中的值,我不確定從哪里開始。

我創建了模型並嘗試使用views.pyforms.py和templates。 我能夠顯示每個訂單號但不在下拉列表中,我正在努力解決如何編寫模板的問題。

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的新手。

你在使用Materialise 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中傳遞任何名稱標簽。

問題: https//github.com/Dogfalo/materialize/issues/4904

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM