【问题标题】:How can i set the size of rows , columns in textField in Django Models如何在 Django 模型中的 textField 中设置行、列的大小
【发布时间】:2011-09-26 01:18:30
【问题描述】:

我有这个模型

summary         = models.TextField()

但我只想有 4 行 15 列。

如果我这样做了,我是否需要重新安装数据库。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    TextField 是一种字段,当 ModelForm 使用它时,默认使用 Textarea 小部件。 Fields 处理后端存储,widgets 处理前端编辑。

    因此,您需要指定要与您的字段一起使用的小部件。您想创建一个ModelForm 并指定您要使用的widget,每个the documentation

    from django import forms
    
    class MyForm(forms.ModelForm):
        class Meta:
            model = MyModel
            widgets = {
              'summary': forms.Textarea(attrs={'rows':4, 'cols':15}),
            }
    

    【讨论】:

    • 呃,不...这是一个模型字段,而不是一个表单字段。
    • 我将在下面发布一个等效的表单字段,但上面的答案是正确的,因为它适用于模型。
    • 两个警告:MyForm 类缺少冒号 (:),如果没有明确引用 Meta 中的字段,它在 Django 1.8 中不起作用(请参阅this question
    • 对于最新版本的 django,请查看 docs.djangoproject.com/en/1.11/topics/forms/modelforms 中的覆盖默认字段
    【解决方案2】:

    这里是将 rows/cols 属性更改为 textarea 的表单特定等效项。使用 forms.Textarea 小部件并设置 attrs 字典值:

    class LocationForm(forms.ModelForm):
    
        auto_email_list = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 2, 'cols': 40}))
        notes = forms.CharField(required=False, widget=forms.Textarea(attrs={'rows': 4, 'cols': 40}))
    
        class Meta:
            model = Location
            exclude = ['id']
    

    希望这可以帮助那些寻找特定表格的人

    【讨论】:

    • 这适用于 djando 1.11 中的实例编辑,谢谢
    【解决方案3】:

    如果您使用 django-crispy-forms,在您的 __init__() 函数中,您可以像这样访问小部件属性:

    self.fields['summary'].widget.attrs['rows'] = 4
    self.fields['summary'].widget.attrs['columns'] = 15
    

    我想您可以在非脆形式 ModelForm 中以这种方式设置 attrs,但您也可以在小部件定义中执行此操作,如上所示。我刚找到这篇文章,并想分享一下我是如何使用crispyforms 做到的。

    【讨论】:

      【解决方案4】:

      你也可以像下面这样使用jQuery:

       $(document).ready(function(){
          $("textarea").attr({"rows": "4",
                              "cols": "15"
          });
      });
      

      【讨论】:

      • 这似乎适用于我在 ModelListView 中的情况,谢谢
      【解决方案5】:

      django-widget-tweaks 包使这变得非常简单。在您的模板中:

      {% load widget_tweaks %}
      ...
      {{ mytextareafield|attr:"rows:3" }}
      

      【讨论】:

        【解决方案6】:

        首先,您必须使用以下方法安装 django 小部件调整:

        pip install django-widget-tweaks
        

        然后您必须转到 setting.py 并将“widget_tweaks”添加到已安装的应用中,如下所示:

        INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'widget_tweaks',
        )
        

        然后转到您的 html 模板并将其替换为 {{ field }},以调整您的文本字段的大小:

        {% load widget_tweaks %}
        {{ mytextareafield|attr:"rows:4" | "cols:30" }}
        

        【讨论】:

          【解决方案7】:

          在 Meta 中使用小部件。 请记住,您还必须在模型表单中添加该字段

          class MyModelForm(forms.ModelForm):
              address = forms.CharField()
                  
              class Meta:
                  model = MyModel
                  exclude = ()
                  widgets = {
                      address': forms.Textarea(attrs={'rows':1, 'cols':15}),
                  }
          

          【讨论】:

            【解决方案8】:

            第一个答案可能是该问题的正确答案,但 django-widget-tweaks 包也是更改更多属性的绝佳选择,例如设置特定的 CSS 类。

            因此,如果您想轻松更改其他属性,请考虑该选项。

            【讨论】:

              猜你喜欢
              • 2019-03-06
              • 2014-05-06
              • 1970-01-01
              • 2021-05-22
              • 1970-01-01
              • 2019-10-24
              • 2017-10-31
              • 2018-02-05
              • 2016-05-30
              相关资源
              最近更新 更多