【问题标题】:Django Crispy Forms: Set rows for Text AreaDjango Crispy Forms:为文本区域设置行
【发布时间】:2020-08-31 17:54:21
【问题描述】:

使用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")

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?
        )

生成的 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)  -->

【问题讨论】:

    标签: python django django-crispy-forms


    【解决方案1】:

    您可以通过传入行来直接用清晰的表单“覆盖”行:

    Row(Column('eggs', rows='2', css_class='form-group col-12')),
    

    或带字段:

    Field('eggs', rows='2')
    

    【讨论】:

    • 在 Django 3.1.7 和 Crispy Forms 1.11.2 中使用 rows kwarg 和 Column 对我没有影响 - 唯一有效的组合是 Field('eggs', rows=1)。请注意,我还将行作为整数而不是字符串传递。我是否有理由使用 Crispy 的 Column 而不是 Field
    【解决方案2】:

    您需要更改您的eggs 字段正在使用的TextArea 小部件的属性。

    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}
    

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 2013-10-19
      • 2012-11-10
      • 2020-01-21
      • 2018-06-17
      • 2019-07-31
      • 1970-01-01
      • 2012-06-16
      • 2015-02-02
      相关资源
      最近更新 更多