【问题标题】:How can I assign attributes to form elements in forms.py without using class Meta?如何在不使用 Meta 类的情况下为 forms.py 中的表单元素分配属性?
【发布时间】:2025-11-28 06:25:01
【问题描述】:

我有一个这样的 django 表单设置:

from django import forms

class ContactForm(forms.Form):
    full_name = forms.CharField(max_length=20)
    phone = forms.CharField(max_length=20)
    email = forms.CharField(max_length=30)
    message = forms.CharField(max_length=400)

    class Meta:
        fields = ['full_name', 'phone', 'email', 'message']

        widgets = {
        'full_name': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'Full Name'}),
        'phone': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'Phone Number'}),
        'email': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'E-Mail Address'}),
        'message': forms.TextInput(attrs={'class': 'dis-block s-text7 size20 bo4 p-l-22 p-r-22 p-t-13 m-b-20', 'placeholder': 'Message'}),
        }

效果很好。但是,我最近了解到class Meta 只能与 ModelForms 一起使用。

我需要在表单中的 forms.py 中分配像上面这样的属性。我知道混合业务和表示逻辑是不好的做法,但我目前正在处理一个复杂的付费 Web 模板,并且使用模板标签应用属性的方法到目前为止还没有奏效。鉴于我在截止日期前,我将推迟以这种方式分配属性作为 v2 功能。

我的问题是,如果 Meta 类只能与具有相应模型的表单一起使用,我该如何将属性分配给与模型不对应的表单中的表单小部件,从而无法使用 Meta 类?

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    您可以使用inline widgets

    一个使用的例子如下:

    class CommentForm(forms.Form):
        name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'}))
        url = forms.URLField()
        comment = forms.CharField(widget=forms.TextInput(attrs={'size': '40'}))
    

    【讨论】:

    • 完美!谢谢。
    最近更新 更多