如何在Django表单中显示下拉列表?

2022-03-26 00:00:00 python django dropdown

问题描述

我在显示下拉列表时遇到问题,下拉列表是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>

要注意的是字段的格式:

当用户单击箭头时,将显示以下内容(只有两个选项):

我做错了什么? 如何更改此设置(在视图或HTML/CSS中)?


解决方案

Company模型中,您只使用了两个选项:

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

在HTML中呈现此模型表单时,应该只有两个选项。如果您需要可能的选项,您应该修改您的模型。

相关文章