【问题标题】:How to display a dropdown list in Django form?如何以 Django 表单显示下拉列表?
【发布时间】:2021-10-28 15:54:09
【问题描述】:

我对下拉列表的显示有疑问,它是 Django 表单的字段部分。它不是一个普通的下拉列表,而是一种多选框(至少,它和这种对象一样高,如下面的屏幕截图所示),具有下拉功能(打开的小箭头选择列表)。
我不明白为什么会这样以及如何解决。
编辑
我将当前版本投入生产,用于测试和演示目的,令人惊讶的是,它可以正常工作,下拉菜单显示正确(在本地环境中仍然很难看)
如果有人对此有解释/解决方案,欢迎他

我尽可能地使用标准对象(我对 CSS 不太满意),在这种情况下,我没有设法更新任何东西(事件设置 height 没有影响,也许是有问题这部分也是)

我可以理解我的问题并不完美,但请解释我有什么问题让我添加缺失的信息(我仍然不明白为什么我们不能提前感谢那些会在这里阅读并尝试解决问题的人,但这是另一个问题......可能会在没有任何解释或评论的情况下进行编辑)

相关模型字段定义如下:

class Company(models.Model):
    """
    Company informations
    - Detailed information for display purposes in the application
      but also used in documents built and sent by the application
    - Mail information to be able to send emails
    """
    company_name = models.CharField("nom", max_length=200)
    comp_slug = models.SlugField("slug")
    rules = [("MAJ", "Majorité"), ("PROP", "Proportionnelle")]   # Default management rule
    rule = models.CharField(
        "mode de scrutin", max_length=5, choices=rules, default="MAJ"
    )

表单没有专门的规则,即使尝试添加一些(在下面的代码中保留为注释):

class CompanyForm(forms.ModelForm):
    company_name = forms.CharField(label="Société", disabled=True)
    # rules = [("MAJ", "Majorité"), ("PROP", "Proportionnelle")]
    # rule = forms.ChoiceField(label="Mode de scrutin", choices=rules)

    class Meta:
        model = Company
        exclude = []

这里是视图:

@user_passes_test(lambda u: u.is_superuser or u.usercomp.is_admin)
def adm_options(request, comp_slug):
    '''
        Manage Company options
    '''
    company = Company.get_company(comp_slug)
    comp_form = CompanyForm(request.POST or None, instance=company)

    if request.method == "POST":
        if comp_form.is_valid():
            comp_form.save()

    return render(request, "polls/adm_options.html", locals())

还有HTML代码部分:

                    <div class="row border mt-4">
                        <div class="col-sm-12">
                            <h5>Préférences de l'application</h5>
                        
                            <div class="row">
                                <div class="col-sm-5 mt-2">
                                    {{comp_form.use_groups}} <label for="{{comp_form.use_groups.label}}">{{comp_form.use_groups.label}}
                                </div>
                                <div class="col-sm-7 mt-2">
                                    <p><label for="{{comp_form.rule.label}}">{{comp_form.rule.label}}</label> : {{comp_form.rule}}</p>
                                    <p>{{comp_form.upd_rule}} <label for="{{comp_form.use_groups.label}}">{{comp_form.upd_rule.label}}</p>
                                </div>
                            </div>
                        </div>
                    </div>

关注的是字段的格式:

当用户点击箭头时,这里是显示(只有 2 个选项):

我做错了什么? 我怎样才能改变它(在视图或 HTML/CSS 中)?

【问题讨论】:

  • 当使用ModelForm 时,Django 会将Charfield 可用的选项应用于表单中的选项,除非被覆盖。
  • 您好,是的,但如前所述,问题出在布局上:我想要一个真正的下拉菜单,而不是这个可怕的大框!
  • 添加一些自定义 CSS 来改变盒子的大小..就是这样
  • 嗯...我当然试过了!我打算设置高度,但它没有效果。也许我没有使用正确的属性,但我有点失落:-/

标签: python django dropdown


【解决方案1】:

在您的 Company 模型中,您只使用了两种选择:

rules = [("MAJ", "Majorité"), ("PROP", "Proportionnelle")]

当用 HTML 渲染这个模型表单时,应该只有两个选项。如果你想要可能的选项,你应该修改你的模型。

【讨论】:

  • 你好@M.sainath,谢谢,但问题不在于显示 2 个值,而在于它们是如何显示的(这个可怕的大框!)
  • 是的,我发现了您的问题……您的尺寸问题。做一些 CSS 并删除不需要的引导类。
  • 我已经尝试过了,但我无法改变任何东西:-/关于那部分有什么建议吗?
  • 嗨@M.sainath,我可以提醒您在之前的问题中将解决方案标记为答案吗?我可能会鼓励 SO 用户回答您的其他问题。
猜你喜欢
  • 2022-01-16
  • 2021-06-14
  • 2013-03-24
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
相关资源
最近更新 更多