Django 3.x - 自定义下拉菜单的自定义默认值

Django 3.x - Custom default value of a custom dropdown menu

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

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'

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

感谢阅读:)

你可以添加initial

在你的表单中

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

如果类别是Post模型中的一个选择字段,其中一个选择是'All',那么你可以像这样将类别的初始值设置为'All'

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'

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

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

你也可以检查这个doc