我现在对django表格有一个小问题(但很烦人)。
我正在使用:
我搜索了整个网络并尝试了很多东西,但我无法弄清楚我可以在代码中注入help_text =“一些随机帮助文本”的地方。所以这是我的代码(缩写为出于理智原因):
#forms.py:
import floppyforms as forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import *
from crispy_forms.bootstrap import *
from courses.models import *
class CourseForm(forms.ModelForm):
class Meta:
model = Course
widgets = {
'title': forms.TextInput, # This is a floppyforms widget
...
}
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = 'POST'
self.helper.form_id = ''
self.helper.form_class = 'form-horizontal'
self.helper.form_action = '' # redirect in the view
self.helper.form_tag = True
self.helper.help_text_inline = True # means that I want <span> elements
self.helper.layout = Layout(
Fieldset('Create a new course', # fieldset label
Field('title', placeholder="Something...", css_class="span4"),
...
),
FormActions(
Submit(
'submit',
'Submit',
css_class="btn-primary"
)
),
)
super(CourseForm, self).__init__(*args, **kwargs)
我试图将它作为'attrs'字典注入到小部件中,并作为attr进入Field。
forms.TextInput(attrs={'help_text': 'Some help text'})
Field('title', help_text="Some help text", css_class="span4")
毋庸置疑,它不起作用。 我需要一个钩子将帮助文本放入我的controls-div中的'span'或'p',而不是输入小部件。
我的模板非常小,如果可能的话应该保持这种状态。我不想迭代表单字段:
#create_course.html
{% extends 'base.html'%}
{% load crispy_forms_tags %}
{% block content%}
{% crispy form %}
{% endblock content%}
呈现如下html:
<div id="div_id_title" class="clearfix control-group">
<label class="control-label requiredField" for="id_title">
Title
<span class="asteriskField">*</span>
</label>
<div class="controls">
<input id="id_title" class="span4 textinput textInput" type="text" placeholder="Something..." maxlength="60" required="" name="title">
</div>
</div>
使用帮助文本,它应如下所示:
<div id="div_id_title" class="clearfix control-group">
<label class="control-label requiredField" for="id_title">
Title
<span class="asteriskField">*</span>
</label>
<div class="controls">
<input id="id_title" class="span4 textinput textInput" type="text" placeholder="Something..." maxlength="60" required="" name="title">
**<span class="help-inline">Supporting help text</span>**
</div>
</div>
任何帮助表示赞赏!我没有尝试通过views.py将代码注入到表单中,但我认为没有必要这样做。应该可以使用正确的钩子和语法在forms.py中执行此操作。
对于这样一个简单问题的长文本感到抱歉;)
答案 0 :(得分:8)
我发现了问题所在。由于我没有真正定义任何字段(我只定义字段小部件),我无法访问help_text。您可以在forms.py中定义Fields(这是不必要的和不好的做法,毕竟它们是ModelFields)或者在models.py中为模型设置help_text。
希望能帮助其他有类似问题的人。