代码之家  ›  专栏  ›  技术社区  ›  girdeux

Django:在Form的init方法中使用小部件?

  •  1
  • girdeux  · 技术社区  · 9 月前

    为什么定义为类属性的字段的小部件可以工作,但对于内部的实例属性却不能工作 __init__ 方法?(我需要init方法)

    class CropForm(forms.ModelForm):
    
        class Meta:
            model = CropModel
            fields = ['name', 'label']
    
        label = forms.CharField(label='label',
                            widget=forms.TextInput(attrs={'class': 'input'}))
    
        def __init__(self, *args, **kwargs):
    
            super().__init__(*args, **kwargs)
            self.name = forms.CharField(label='name',
                                widget=forms.TextInput(attrs={'class': 'input'}))
    

    form image

    如何在 __init__ 工作方法?谢谢。

    1 回复  |  直到 9 月前
        1
  •  1
  •   willeM_ Van Onsem    9 月前

    你非常接近:

    class CropForm(forms.ModelForm):
    
        class Meta:
            model = CropModel
            fields = ['name', 'label']
    
        label = forms.CharField(
            label='label', widget=forms.TextInput(attrs={'class': 'input'})
        )
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            self.fields['name'] = forms.CharField(
                label='name', widget=forms.TextInput(attrs={'class': 'input'})
            )

    Django的 Form 使用元编程来查看定义了哪些表单字段。每次初始化表单时,都会在 self.fields 然后进行渲染。因此当呈现时, 查看类属性,但 self.fields 字典。


    注: :型号通常没有 …Model 后缀。因此,最好重命名 CropModel Crop .