使用Django在html中使用多个下拉菜单过滤器

时间:2017-11-28 11:51:53

标签: django django-templates django-rest-framework

我是Django的新手并尝试创建一个用户可以选择值的选项。有人可以指导如何继续吗?

我附上了模型供您参考,用户应该能够选择BU,团队,级别,产品和渠道的值。此外,在选择BU时,团队应该更新,等等。请建议。

class Master_Table(models.Model):
    Key_Variable=models.CharField(max_length=255,primary_key=True)
    BU = models.CharField(max_length=20)
    Team = models.CharField(max_length=20)
    Level = models.CharField(max_length=20)
    Product= models.CharField(max_length=20)
    Channel = models.CharField(max_length=20)

以下是视图

def index(request):
    queryset=Master_Table.obects.all()
    context={ "object_list" : queryset }
    return render(request,'compmixapp/index.html',context)

HTML

  <form>
    <input list="BU" name="BU"> <br /> <br>
      <datalist id="BU">
        <option value={% for obj in object_list %}
                      {{obj.BU}}
                      {% endfor %}
        >
  </form>

2 个答案:

答案 0 :(得分:1)

您可以在models.py

中设置选项

BU的示例可以为您的所有属性完成。

BU_CHOICES = (
    ('val','displayName'),
    ('val2', 'displayName2'),
    ('val3','displayName3'),
)

class Master_Table(models.Model):
    BU = models.CharField(choices=BU_CHOICES, default='val')

希望这有帮助!

答案 1 :(得分:0)

您缺少引号,并且您定义for loop的方式在语义上是错误的。

将HTML更改为以下

<form>
    <input list="BU" name="BU"><br/><br>
        <datalist id="BU">
        {% for obj in object_list %}
        <option value="{{obj.BU}}">
        {% endfor %}
</form>

导致只显示选项的一个值的问题是以下部分,它在语法上是正确的,但在语义上错误,产生的结果与您预期的不同。

 <option value={% for obj in object_list %}
                  {{obj.BU}}
                  {% endfor %}
    >

正在讨厌的事情是,datalist只获得一个值,即传递给它的querylist中的所有值。

进一步详细说明,假设Master_Table的查询集返回a, b, c, d个对象。所以你编写的循环会生成以下HTML

<form>
    <input list="BU" name="BU"><br/><br>
        <datalist id="BU">
            <option value=a.BU b.BU c.BU d.BU>
</form>