我希望我的下拉列表中填充我的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
)
答案 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>