未填充Django下拉列表

时间:2020-02-27 16:45:20

标签: python django dropdown

我希望我的下拉列表中填充我的Django项目中一个数据库表中的值,但是仍然为空,我不知道为什么。

这是我的home.html页面的html代码:

<select name="regions" id="regions">
    {% for item in regions_list %}
    <option val="{{ item.name_reg }}"> {{ item.name_reg }} </option>    
    {% endfor %}
</select>

models.py:

class data_reg(models.Model):
    id = models.AutoField(primary_key=True)
    name_reg = models.TextField(db_column='NAME_REG', blank=True, null=True) 

    class Meta:
        managed = True
        db_table = 'reg'

views.py:

def MyView(request):
    regions_list = RegionChoiceField()

    query_results_dict = {
        'regions_list': regions_list,
    }

    return render(request,'home.html', query_results_dict)

forms.py:

class RegionChoiceField(forms.Form):

    regions = forms.ModelChoiceField(
        queryset=data_immo.objects.values_list("name_reg", flat=True).distinct(),
        empty_label=None
    )

3 个答案:

答案 0 :(得分:1)

当将ModelChoiceField传递到上下文时,我认为模板应该有所不同。

{% for item in regions_list %}
<option val="{{ item.name_reg }}"> {{ item.name_reg }} </option>    
{% endfor %}

更改为

{% for item in regions_list %}
{{ item }}
{% endfor %}

或更简单,只需将表单放入模板

{{regions_list}}

希望这行得通,

问候 肯

答案 1 :(得分:0)

我刚刚测试了一下,它似乎对我有用。 您可以在表格中打印查询吗?py

print(data_immo.objects.values_list("name_reg", flat=True).distinct())

这将显示您的终端中设置的查询:

<QuerySet ['a_value']>

我发现在各个级别进行打印始终是一件好事,以便快速,轻松地进行调试。

答案 2 :(得分:0)

我设法使其成功运行,并且避免了使用forms.py。我只是直接在views.py中生成了“ regions_list”变量,只有在此之后,它才能被正确识别。所以这是最终的样子:

def MyView(request):
    regions_list = data_immo.objects.values_list("name_reg", flat=True).distinct()

    query_results_dict = {
        'regions_list': regions_list,
    }

    return render(request,'home.html', query_results_dict)

此外,根据Ken的建议,我对HTML代码进行了一些修改:

<select name="regions" id="regions">
    {% for item in regions_list %}
    <option val="{{ item.name_reg }}"> {{ item}} </option>    
    {% endfor %}
</select>