Самый простой способ для вашего использование используется для использования CSS. Это язык, предназначенный для определения презентации. Посмотрите на код, сгенерированный формой, обратите внимание на идентификаторы для интересующих вас полей и измените внешний вид этих полей с помощью CSS.
Пример long_desc
поля в вашем ProductForm (если ваша форма не имеет пользовательский префикс):
#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
Это described in Django documentation.
Третий подход должен оставить приятный декларативный интерфейс 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
Этот подход имеет следующие преимущества:
- Вы можете определить атрибуты виджета для полей, которые генерируются автоматически из модели без переопределения целые поля.
- Это не зависит от префикса вашей формы.
Второй работал отлично – 2008-09-21 07:15:09
Вариант 3 очень полезно. Возможно, пример может также показать, что поля не должны быть определены в Форме, но все же могут переопределять поля, определенные в Модели, которые проходят автоматически. – 2009-12-03 16:20:50