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>...
我要做的是在权重字段插入输入标记后的额外元素并自定义text和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) .
希望这是有道理的 .
1 回答
使用注释中建议的自定义窗口小部件是一个选项,另一个选项是手动遍历字段 .
有关其他信息,请参阅手册中的Looping over form fields部分 .
在执行此操作之前,请查看HTML源并确认
id_currentWeightKg
是相关字段的正确ID . 如果不使用替换正确的 .