如何在Django表单定义中为不符合模型的扩展表单添加样式?

2024-10-01 15:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django表单,我正在使用该表单处理订单和卡支付。我在视图中扩展了我的表单,使其具有信用卡字段,因为这些字段与我的模型不对应,因为我没有将它们保存在数据库中

在我的表单.py中,我为表单字段指定class属性,如下所示:

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ['first_name', 'last_name', 'email',
        'address', 'zipcode', 'city', 'state']
        widgets = {
        'first_name': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'First Name'}),
        'last_name': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'Last Name'}),
        'email': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'E-Mail'}),
        'address': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'Address'}),
        'zipcode': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'Zipcode'}),
        'city': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'City'}),
        'state': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'State'}),
        }

我知道这是不赞成混合表示和业务逻辑,但我有一个严格的截止日期,我与先进的CSS,我不完全理解,所以这是我发现工作的方法,迄今为止付费模板。我将在稍后的阶段对此进行修改,以便通过模板标记添加类

不过,由于这是工作,我想继续使用这种方法

我的问题是,我无法以相同的方式将属性分配给视图中的扩展窗体,如下所示:

class OrderPayForm(OrderForm):

    card_num = forms.CharField(max_length=16)
    exp_month = forms.CharField(max_length=2)
    exp_year = forms.CharField(max_length=2)
    cvc = forms.CharField(max_length=3)

    class Meta(OrderForm.Meta):
        fields = OrderForm.Meta.fields + ['card_num', 'exp_month', 'exp_year', 'cvc']

尝试在myforms.py或myviews.py中添加属性,如:

class OrderPayForm(OrderForm):

    card_num = forms.CharField(max_length=16)
    exp_month = forms.CharField(max_length=2)
    exp_year = forms.CharField(max_length=2)
    cvc = forms.CharField(max_length=3)

    class Meta(OrderForm.Meta):
        fields = OrderForm.Meta.fields + ['card_num', 'exp_month', 'exp_year', 'cvc']

        widgets = {
        'card_num': forms.TextInput(attrs={'class': 'sizefull s-text7 p-l-22 p-r-22', 'placeholder': 'Card Number'}),
        }

这不会导致错误消息,但会导致我的所有formfields丢失在my forms.py中指定的类属性

我做错什么了


Tags: fieldsformstextinputcardlengthnumattrsmax
1条回答
网友
1楼 · 发布于 2024-10-01 15:47:48

当您在子类中定义小部件时,会覆盖父类中的小部件定义,您可以通过编写自定义初始化方法来避免这种情况:

class OrderPayForm(OrderForm):
    card_num = forms.CharField(max_length=16)
    exp_month = forms.CharField(max_length=2)
    exp_year = forms.CharField(max_length=2)
    cvc = forms.CharField(max_length=3)

    class Meta(OrderForm.Meta):
        fields = OrderForm.Meta.fields + ['card_num', 'exp_month', 'exp_year', 'cvc']


    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['card_num'].widget = forms.TextInput(attrs={
            'class': 'sizefull s-text7 p-l-22 p-r-22',
            'placeholder': 'Card Number'
        })

相关问题 更多 >

    热门问题