Django Crispy Forms:为文本区域设置行

Bar*_*nka 4 python django django-crispy-forms

创建带有 的表单时FormHelper(),我的表单的文本区域(对于TextFields)太大:它们设置为 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, null=False, default='', verbose_name="Lots of eggs")
Run Code Online (Sandbox Code Playgroud)

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', css_class='form-group col-12')),
            # HERE: How can I set the rows for the text area widget?
        )
Run Code Online (Sandbox Code Playgroud)

结果 HTML:

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, null=False, default='', verbose_name="Lots of eggs")
Run Code Online (Sandbox Code Playgroud)

Yel*_*ark 6

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}
Run Code Online (Sandbox Code Playgroud)


Kea*_*ton 5

您可以通过传入行来直接使用脆皮形式“覆盖”行:

Row(Column('eggs', rows='2', css_class='form-group col-12')),
Run Code Online (Sandbox Code Playgroud)

或与字段:

Field('eggs', rows='2')
Run Code Online (Sandbox Code Playgroud)