问题描述
使用FormHelper()
创建表单时,表单的文本区域(用于TextField
)太大:它们设置为10行。我想设置行数。我该怎么办?
我的代码:
models.py
:
from django.db import models
class Spam(models.Model).
ham = models.CharField(max_length=10,blank=True,null=False,default='Some ham')
eggs = models.TextField(blank=True,default='',verbose_name="Lots of eggs")
forms.py
:
from django import forms
from crispy_forms.helper import FormHelper
from crispyy_forms.layout import (Layout,Row,Column)
from .models import Spam
class SpamForm(forms.ModelForm):
class Meta():
model = Spam
fields = ('ham','eggs')
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.helper = FormHelper()
self.helper.form_method = 'POST'
self.helper.layout = Layout(
Row(Column('ham',css_class='form-group col-12')),Row(Column('eggs',# HERE: How can I set the rows for the text area widget?
)
产生的HTML:
<!-- (ommited for brevity) -->
<div class="form-row " >
<div class="form_group col-12" rows="2">
<div id="div_id_eggs" class="form-group">
<label for="eggs" class="">Lots of eggs</label>
<div class="">
<textarea name="eggs" cols="40" rows="10" class="textarea form-control" id="eggs"></textarea>
<!-- ^^^^^^^^
<!-- THIS is what I'd like to change to "2" -->
</div>
</div>
</div>
</div>
<!-- (ommited for brevity) -->
解决方法
您需要更改TextArea
字段正在使用的eggs
小部件的属性。
class SpamForm(forms.ModelForm):
# no changes here
def __init__(self,*args,**kwargs):
# No changes to your existing code,just add this:
self.fields['eggs'].widget.attrs = {'rows': 2}
,
您可以通过在以下行中传递行来直接以酥脆形式“覆盖”行:
Row(Column('eggs',rows='2',css_class='form-group col-12')),
或带有字段:
Field('eggs',rows='2')