社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

在django表单定义中为与模型不对应的扩展表单添加样式

Jake Rankin • 5 年前 • 1175 次点击  

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

在我的 表单 ,我正在为表单字段指定类属性,如下所示:

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']

试图在我的 表单 或者在我的 VIEW 像:

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'}),
        }

这不会导致错误消息,但会导致我的所有窗体字段丢失在my forms.py中分配给的类。

我做错什么了?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40195
 
1175 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Pedro
Reply   •   1 楼
Pedro    6 年前

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

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'
        })