class ItemForm(forms.ModelForm):
description = forms.CharField(label='Description', max_length=250, widget=forms.Textarea, required=False)
image = forms.ImageField(label='Item Picture', max_length=50, required=False)
start = forms.DateField(widget=SelectDateWidget, required=False)
end = forms.DateField(widget=SelectDateWidget, required=False)
cost_price = forms.CharField(label='Cost Price Per Unit', widget=???, max_length=5)
class Meta:
model = Item
fields = ('image',
'name',
'description',
'quantity',
'start',
'end',
'cost_price',
'selling_price',
)
我需要在cost_price字段前添加一个文本变量。
从文档中,我知道widget类是我需要修改的,但我不太清楚如何去做。
更新
因此,我的表单中的每个字段都在我的模板中由{{ field }}
表示。此{{ field }}
生成该特定字段的HTML。我想修改cost_price字段的HTML,以便我可以将变量{{ currency_type }}
附加到HTML的前面。所以看起来应该是这样的:
<span>USD</span><input type="text" name="cost_price" id="id_cost_price">
现在我通过模板逻辑包含这个{{ currency_type }}
变量。我想知道我是否可以通过自定义表单字段的HTML来实现这个问题。希望这能更好地解释它!
答案 0 :(得分:18)
您可以创建继承自TextInput小部件(用于CharField)的自定义表单小部件,并覆盖它的呈现方法。这样您就可以完全按照自己的意愿行事 - 在常规TextInput小部件HTML之前插入自定义HTML。
from django.utils.safestring import mark_safe
from django.forms import widgets
# ...
# your custom widget class
class CostPriceWidget(widgets.TextInput):
def render(self, name, value, attrs=None):
return mark_safe(u'''<span>USD</span>%s''' % (super(CostPriceWidget, self).render(name, value, attrs)))
# your form class
class ItemForm(forms.ModelForm):
# ...
cost_price = forms.CharField(label='Cost Price Per Unit', widget=CostPriceWidget, max_length=5)
# ...
希望这有帮助。