【问题标题】:Django 3.x - Custom default value of a custom dropdown menuDjango 3.x - 自定义下拉菜单的自定义默认值
【发布时间】:2020-06-26 17:34:23
【问题描述】:

我自己构建了一个下拉类别选择菜单,使我的 django 站点的搜索功能更加精确和过滤。到目前为止,这工作得很好,但我无法弄清楚如何更改下拉菜单的默认值,因为它当前显示“--------”而不是默认选择的“全部”价值。

base.html:

<div class="my-custom-dropdown">
   <a>{{ categorysearch_form.category }}</a>
</div>

search_context_processor.py:

def categorysearch_form(request):
    form = SearchForm()
    return {'categorysearch_form': form}

forms.py

class SearchForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['category']

    def __init__(self, *args, **kwargs):
        kwargs.setdefault('label_suffix', '')
        super(SearchForm, self).__init__(*args, **kwargs)
        self.fields['category'].required = False
        self.fields['category'].initial = 'All'

确实。知道如何实现吗?在我的 css 中使用 content: 参数只有非常有限的好处,因为标签“All”总是放在实际选择框之外。

感谢阅读:)

【问题讨论】:

    标签: python django dropdown


    【解决方案1】:

    你可以添加initial

    在你的表单中

    name = forms.CharField(initial='Your name')
    

    【讨论】:

    • 我没有遇到以下问题:init中的文件“/venv/lib/python3.8/site-packages/django/forms/models.py”,第 296 行> object_data.update(initial) ValueError: 字典更新序列元素#0 的长度为 1; 2 是必需的
    • 好的,但只是为了让您的回答更清楚,我将其添加到我的 forms.py 而不是我的上下文处理器中,对吗?因为你已经写了“以你的形式”。到目前为止谢谢:)
    • 除了我使用模型表单而不是forms.Form。您发送的链接似乎无法解决此问题,或者在这种情况下根本不可能?
    • 也可以在模型表格上做看到这个答案stackoverflow.com/questions/5864869/…
    【解决方案2】:

    如果类别是 Post 模型中的选择字段,并且其中一个选项是“全部”,那么您可以像这样将类别的初始值设置为“全部”

    class SearchForm(forms.ModelForm):
        class Meta:
            model = Post
            fields = ['category']
    
        def __init__(self, *args, **kwargs):
            kwargs.setdefault('label_suffix', '')
            super(SearchForm, self).__init__(*args, **kwargs)
            self.fields['category'].required = False
            self.fields['category'].initial = 'All'
    

    【讨论】:

    • 嗯,这也没有效果,我不支持它,因为它看起来实际上很容易实现。我开始认为这是一个与 CSS 相关的问题,相应地添加了我的 CSS
    【解决方案3】:

    空选项显示为“--------”。要显示其他内容(可能是“全部”)代替“--------”,我们可以在 ModelForms init 方法中添加一个 empty_label,如下所示 -

    self.fields['category'].empty_label = "All"
    

    您也可以查看doc

    【讨论】:

    • 是的,这是有效的 :D 感谢您提供这个很棒的提示。此时从未有过使用 empty_label 的想法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    • 2020-05-11
    • 2012-10-12
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    相关资源
    最近更新 更多