【问题标题】:Django dropdown is not populated未填充 Django 下拉列表
【发布时间】:2020-06-11 17:58:04
【问题描述】:

我希望在我的 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
    )

【问题讨论】:

  • 为什么要创建一个继承自 forms.Form 的 RegionChoiceField 类?
  • 我最初是从其他人那里获取代码并对其进行修改。已经是这样了(除了那个 Region 被称为别的东西)。我是 Django 新手,所以目前还有很多概念不是很了解。
  • 好的,所以 RegionChoiceField 只是命名不当,也许应该称为 RegionChoiceForm(因为它实际上是一个表单,而区域实际上是表单中的一个字段)。所谓的 query_results_dict 实际上是一个上下文。可能值得回顾一下这段代码中的命名约定,因为它们最终可能会混淆您将代码与 Django 文档协调一致的尝试,并影响您理解它的能力。
  • 看看这个例子是否有帮助:stackoverflow.com/questions/36724255/…
  • 尽管我对这个解决方案感到有些困惑,但我已经尝试过了,但结果我只有一个空的下拉菜单。这是我在模板中得到的结果,我真的不确定它是否正确:

标签: python django dropdown


【解决方案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}}

希望这行得通,

问候 肯

【讨论】:

  • 不幸的是它没有用。尝试第二个选项时,我只是在下拉列表中选择“区域:”。第一个选项只返回一个空的下拉菜单。
【解决方案2】:

我刚刚对此进行了测试,它似乎对我有用。 您可以在 forms.py 中打印查询吗

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

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

<QuerySet ['a_value']>

我发现在各种级别上打印以进行调试总是好的,快速且简单。

【讨论】:

    【解决方案3】:

    我设法使它工作并通过避免使用 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>
    

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 2021-08-23
      • 1970-01-01
      • 2022-01-19
      • 2020-06-01
      • 2023-03-07
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多