2011-10-06 4 views
9
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フィールドの前にテキスト変数を含める必要があります。Django:特定のフォームフィールドのHTMLをカスタマイズする

ドキュメントから、私はウィジェットクラスが私が変更する必要があることを知っていますが、それを行う方法についてはあまりよく分かりません。だから私のフォーム内の各フィールドが私のテンプレートで{{ field }}で表される

UPDATE

。このは、その特定のフィールドのHTMLを生成します。私は変数の{{ currency_type }}をHTMLの先頭に追加できるように、cost_priceフィールドのHTMLを修正したいと思います。

<span>USD</span><input type="text" name="cost_price" id="id_cost_price"> 

は、今私は、テンプレートロジックを通してこの{{ currency_type }}変数を含めています:だから、それは次のようになります。私はフォームフィールドのHTMLをカスタマイズすることでこれを行うことができるかどうか疑問に思っていました。これがよりうまく説明されるといいですね!

+0

私はこの問題を十分に理解していません。あなたはいくつかの例を挙げることができますか? –

+0

フィールドに関する説明や説明が必要な場合は、[help_text](https://docs.djangoproject.com/ja/dev/ref/forms/fields/#help-text)を使用してください。 – DrTyrsa

+0

悪い説明をつけて申し訳ありません、私はそれを更新しました。私はそれがより明確であることを望む! – super9

答えて

16

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) 
    # ... 

希望します。

+0

通貨タイプは変数ですが、だから私はそれをハードコードすることはできません。 – super9

+0

申し訳ありませんが、私はあなたの質問を十分に読んでいないでしょう。それからあなたはフィールドの文字列の値ではなく、通貨の種類を定義するオブジェクトを渡すように、forms.CharFieldをサブクラス化する必要があると思います。できれば私の答えを正確な解法で編集しようとします。 – MisterMetaphor

+0

大変感謝しています! – super9

関連する問題