带有Crispy Forms的Django表单继承

问题描述

我正在尝试以更干燥的方式在Django中处理表单。我正在使用Django Crispy Forms进行布局和渲染。

我有一个模特:

class Txn(models.Model): 
    transaction_date = models.DateField()
    reference = models.CharField(max_length=12)
    arrived = models.DecimalField(max_digits=10,decimal_places=2,null=True,blank=True)
    used = models.DecimalField(max_digits=10,blank=True)
    sent= models.DecimalField(max_digits=10,blank=True)
    adjust = models.DecimalField(max_digits=10,blank=True)

对于4个数字字段(到达,使用,发送,调整)中的每一个,我都有一个显示这些字段之一的表格。 (顺便说一句,这是基于从另一个项目继承的模型-我知道有更好的方法来构造它,但是我必须使用此结构)。因此,我创建了4种看起来非常相似的表单:

class TxnuseForm(forms.ModelForm):
    class Meta:
        model = Txn
        fields = ('transaction_date','reference','used') 

    def __init__(self,*args,**kwargs):
        super(TxnuseForm,self).__init__(*args,**kwargs)

        # Layout deFinition for the form
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Row(
                Column(Field('reference',autocomplete="off",autofocus="autofocus"),css_class='form-group col-sm-4 mb-0 pb-0'),Column(Field('transaction_date'),Column(Field('used',step='1'),css_class='form-group col-sm-4 mb-0 pb-0')
            )
        )

    # Validation for amount used - must be a positive number
    def clean_used(self):
        data = self.cleaned_data['used']
        if data is None or data == "":
            data=0
        if data <=0:
            raise forms.ValidationError("Must be a positive number.")
        return data

其他3种形式称为TxnArrivedForm,TxnAdjustForm和TxnSentForm,与TxnusedForm完全相同-形式上的唯一区别是公开的数字字段。我正在尝试对表单进行子类化,并使用继承来减少代码。我尝试了以下方法

class TxnBaseForm(forms.ModelForm):
    class Meta:
        model = Txn
        fields = ('transaction_date','reference')

    def __init__(self,**kwargs):
        super(TxnBaseForm,**kwargs)

        # Layout deFinition for the form
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Row(
                Column(Field('transaction_date'),Column(Field('reference',)
        )

class TxnuseForm(TxnBaseForm):
    class Meta(TxnBaseForm.Meta):
        fields = TxnBaseForm.Meta.fields + ('used',)
       
    def __init__(self,**kwargs)
        self.helper.layout.append =  Column(Field('used',css_class='form-group col-sm-4 mb-0 pb-0')
        self.fields['used'].label = "Qty. Used"

    # Validation for amount used - must be a positive number
    def clean_used(self):
        data = self.cleaned_data['used']
        if data is None:
            data=0
        if data <=0:
            raise forms.ValidationError("Must be a positive number.")
        return data

显示交易日期和参考字段,但使用过的字段根本无法呈现。我在做什么错还是想念?

后续行动:由于我们尚不知道该字段的名称,是否有一种简单的方法来处理基本表单中该字段的验证?

感谢您的反馈!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...