如何在 django 的 init 中将小部件添加到表单字段?

How do you add a widget to a form field in init in django?

基本上,我想在 init 函数中更改表单字段的小部件。首先,这是表格:

class ModelForm(forms.ModelForm):
    date = forms.ChoiceField()

    def __init__(self, *args, **kwargs):
        super(ModelForm, self).__init__(*args, **kwargs)
        self.fields['date'].choices = DATE_CHOICES

    class Meta:
        model = Model
        fields = (
            'date',
         )
         widgets = {'date': SelectDateWidget()}

但是,由于某种原因,小部件 SelectDateWidget() 似乎无法正常工作。所以,我想改为将此小部件添加到 init 函数,以便该小部件将反映在表单上。然而,这只是我的想法。如果将这个小部件添加到 init 函数中不起作用,你能给我一些方法来将这个小部件用于 date 字段吗?谢谢,有什么问题请给我留言。

如果我们假设日期是 DateField,那么您可以像这样添加 SelectDateWidget

class ModelForm(forms.ModelForm):
    date = forms.DateField(widget=forms.SelectDateWidget(empty_label=("Choose Year", "Choose Month", "Choose Day"),))

    class Meta:
        model = Model
        fields = (
            'date',
        )

现在,如果您想添加一些已定义的选项,请按照 this link 了解更多详细信息。

The doc here也很好看

注意:您不必为此覆盖__init__方法。