私はちょうどdjangoフォームで(しかし、厄介な)小さな問題を抱えています。django crispy-forms&floppyforms with bootstrap:help_textをModelFormに挿入する方法は?
私が使用している:
- さえずりを
- ブートストラップジャンゴfloppyforms(ただHTML5ウィジェットの場合)(テンプレートタグ&レンダリング用)
- Djangoのクリスピー・フォーム
- を自分のフォームがされていますすべてModelForms可能な場合は変更しないでください。
私はウェブ全体を検索して大量のものを試しましたが、help_text = "Some random 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に」dictのようおよびフィールドにATTRとしてそれを注入しようとしました。
forms.TextInput(attrs={'help_text': 'Some help text'})
Field('title', help_text="Some help text", css_class="span4")
言うまでもなく、動作しませんでした。 入力ウィジェットではなく、ヘルプテキストを私のcontrols-div内の 'span'または 'p'に入れるにはフックが必要です。
テンプレートは非常に小さく、可能な場合はそのままにしてください。私は、フォームフィールドを反復処理する必要はありません:
<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>
次のHTMLとしてレンダリング
#create_course.html
{% extends 'base.html'%}
{% load crispy_forms_tags %}
{% block content%}
{% crispy form %}
{% endblock content%}
どんな助けもありがとう!私は、フォームにviews.pyを通してコードを注入しようとはしませんでしたが、それを行う際には何のポイントもありません。それは右のフックと構文でforms.pyでそれを行うことができるはずです。
このような単純な問題のために長いテキストのため申し訳ありません;)
[OK]問題の内容を確認しました。私は実際にフィールドをどこにも定義しなかったので(私はフィールドウィジェットを定義しただけでした)、私はhelp_textにアクセスできませんでした。 forms.pyにFieldsを定義することができます(ModelFieldsはDRYです)。またはmodels.pyのモデルのhelp_textを設定します。 – tiwei
私はあなたがそれを解決してうれしいです。モデルでhelp_textを指定する方がよいでしょう。しかし、フィールドを再定義せずにオーバーライドすることもできます。スライド34を参照してください。https://speakerdeck.com/u/maraujop/p/advanced-django-forms-usage – maraujop
あなたのコメントを回答として投稿して受け入れることができますか?そうすれば、それは未回答の質問として現れません。 –