问题描述
我正在尝试以更干燥的方式在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 (将#修改为@)