【发布时间】:2017-05-02 19:57:27
【问题描述】:
django 新手(通常是 python)。我正在尝试对我的一种表单进行一些自定义,并想知道最好的方法。
以下面的例子为例,一个包含 3 个字段的表单,两个字段用于输入重量,一个用于目标日期。
class BasicFitnessGoalForm(forms.ModelForm):
class Meta:
model = BasicFitnessGoal
fields = ('currentWeightKg','targetWeightKg','targetDate')
widgets = {
'targetDate': forms.DateInput(attrs={'class':'formdatepicker'}),
}
labels = {
'currentWeightKg' : "Current Weight",
'targetWeightKg' : "Goal Weight",
'targetDate' : 'Goal Date'
}
我希望能够使用诸如goalForm.as_p()之类的东西在我的模板中显示此表单,它会生成如下所示的html:
<p>
<label></label><input><input>...
我要做的是在权重字段上在输入标签之后插入一个额外的元素并自定义文本和 css 类。所以我最终得到了这样的结果:
<p>
<label>Current Weight</label><input type=Number...><span class="customCss">Kg (or text I enter</span>
</p>
那么无论如何在模型类中完成这个?我知道我可以使用 javascript 或循环遍历模板中的字段而不是使用 form.as_p 标记来做到这一点。但是我想重用它,所以如果我可以创建一种方法来在我想使用的任何地方输出所需的 html,它是最干净的。
我看过一些示例,您可以在表单上设置方法,例如 as_foobar,其中返回 self.html_output。但我看到这只允许指定“normal_row”、“error_row”等值。我想为此表单编写自定义模板并从模型上的方法返回 html,然后我可以从模板访问。 (或覆盖此模型的 as_p 方法以根据字段返回自定义 html)。
希望这是有道理的。
【问题讨论】:
-
您可以创建一个自定义widget 并像在
targetDate上使用一样使用。 -
我认为自定义小部件是我想要的。我检查了该链接,并相信如果我覆盖渲染方法,我可以生成所需的 HTML,然后表单将在我使用它的任何地方按照需要呈现。感谢您为我指明正确的方向。
标签: python django django-forms django-templates