変化の幅を押してフォーム変数を新規作成で作成されModelFormにDjango
-
02-07-2019 - |
質問
変更するには、どうすればいいで幅textareaフォーム要素の場合に使用したModelFormホームページを作成いたします。?
こちらの商品のクラス:
class ProductForm(ModelForm):
long_desc = forms.CharField(widget=forms.Textarea)
short_desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Product
のテンプレートコー---
{% for f in form %}
{{ f.name }}:{{ f }}
{% endfor %}
f
では実際のフォーム要素...
解決
最も簡単な方法はご利用の場合は、CSSを利用.この言語の意味を定義す。のコード生成される形となりますのでご注意下さid分野に興味のある変更の外観はこれらの分野のをCSS.
例 long_desc
分野におProductFormがございませんのでカスタムprefix):
#id_long_desc {
width: 300px;
height: 200px;
}
第二のアプローチ での attrs
キーワードをウィジェットのコンストラクタです。
class ProductForm(ModelForm):
long_desc = forms.CharField(widget=forms.Textarea(attrs={'cols': 10, 'rows': 20}))
short_desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Product
この に記載のDjangoの文書.
第三のアプローチ ですが、素敵なコインタフェースnewformsを設定ウィジェットの属性のカスタムコンストラクタです。
class ProductForm(ModelForm):
long_desc = forms.CharField(widget=forms.Textarea)
short_desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Product
# Edit by bryan
def __init__(self, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
self.fields['long_desc'].widget.attrs['cols'] = 10
self.fields['long_desc'].widget.attrs['rows'] = 20
このアプローチのメリットは次のとおりです:
- を定義できますウィジェットの属性の分野で生成されるから自動的にモデルの再定義の全体ます。
- なの接頭辞のです。
他のヒント
優れた回答によるzuber、私がエラーの例のコード第三のアプローチ.コンストラクタは:
def __init__(self, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
self.fields['long_desc'].widget.attrs['cols'] = 10
self.fields['long_desc'].widget.attrs['cols'] = 20
のオブジェクトには無いのでattrs'属性は、そのウィジェット。
場ご利用の増加のようなGrappelliる重用スタイルをよく目にすることでしょうる任意のメソッドの行と列の属性の取得を無視でCSSセレクタとおwidgetとなります。この利用の場合zuberの優れた二次または第三のアプローチです。
この場合、最初のアプローチを配合のいずれかの又は第三のアプローチにより設定の"スタイル属性の代わりに"行"と"cols属性.
この例の修正 init の第三のアプローチ上記:
def __init__(self, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
self.fields['short_desc'].widget.attrs['style'] = 'width:400px; height:40px;'
self.fields['long_desc'].widget.attrs['style'] = 'width:800px; height:80px;'
セット列とcssクラスのお管理モデルのビュー:
'explicacion': AutosizedTextarea(attrs={'rows': 5, 'class': 'input-xxlarge', 'style': 'width: 99% !important; resize: vertical !important;'}),
所属していません StackOverflow