【问题标题】:Django forms.DateInput does not apply the attributes given in attrs fieldDjango forms.DateInput 不应用 attrs 字段中给出的属性
【发布时间】:2013-03-16 07:44:25
【问题描述】:

占位符,试图通过 django 的 attrs 说明符为 forms.DateInput 应用时未设置类

表单是ModelForm

并根据docs

采用与 TextInput 相同的参数,但多了一个可选参数:

代码如下:

widgets = {
   'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
                    attrs={'class':'myDateClass', 
                           'placeholder':'Select a date'}
                    )
}

同样适用于forms.TextInput,它工作得很好。

我在这里错过了什么?

任何人都想要完整的课程代码:

class trademark_form(ModelForm):
    my_date_field = DateField(input_formats=['%d-%m-%Y'])
    class Meta:
        model = myModel

        widgets = {
                   'my_date_field': forms.DateInput(format=('%d-%m-%Y'), attrs={'class':'myDateClass', 'placeholder':'Select a date'}),
                   'field1': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..'}),
                   'field2': forms.TextInput(attrs={'class':'textInputClass', 'placeholder':'Enter a Value..', 'readonly':'readonly', 'value':10}),
                   'desc': forms.Textarea(attrs={'class':'textAreaInputClass', 'placeholder':'Enter desc', 'rows':5}),

               }
        exclude = ('my_valid_field')

为字段生成的 HTML,my_date_field

<input type="text" id="id_my_date_field" name="my_date_field">

为字段生成的 HTML,field1

<input type="text" name="field1" class="textInputClass" placeholder="Enter a Value.." id="id_field1">

【问题讨论】:

  • 您能否展示一下您这边的渲染结果。我得到了, 。占位符在这里应该做什么。你不应该使用标签

标签: python django django-forms django-1.4


【解决方案1】:

由于您没有发布表单代码,我最好的猜测是您明确实例化了这样的表单字段通过发布大致如下所示的代码证实了我的猜测:

class MyForm(forms.ModelForm):
    my_date_field = forms.DateField()

    class Meta:
        model = MyModel
        widgets = {
            'my_date_field': forms.DateInput(format=('%d-%m-%Y'), 
                                             attrs={'class':'myDateClass', 
                                            'placeholder':'Select a date'})
        }

我可以说它不起作用,因为如果你像这样显式地实例化一个表单域,Django 假设你想要完全定义表单域的行为;因此,您不能使用内部Meta 类的widgets 属性。

关于overriding the default field types or widgets 部分末尾的注释指出:

以声明方式定义的字段保持原样,因此任何 对 Meta 属性进行的自定义,例如小部件、标签、 help_texts 或 error_messages 被忽略;这些仅适用于字段 是自动生成的。

【讨论】:

  • 检查问题中的更新。而且你发布的答案是无关紧要的!
  • 感谢您的意见。我仍然没有看到文档中明确提到这一点。因此,我的困惑。你是对的。
  • 我同意,这不是很清楚。标题'field types OR widgets'和备注框第一段有提示。
【解决方案2】:

根据@Martin 的回复并阅读 Django 文档,最终的解决方案应该是:

class MyForm(forms.ModelForm):
    my_date_field = forms.DateField(
        widget=forms.DateInput(format=('%d-%m-%Y'), 
                               attrs={'class':'myDateClass', 
                               'placeholder':'Select a date'}))

    class Meta:
        model = MyModel
        widgets = {
        }

【讨论】:

    【解决方案3】:

    您可以简单地创建一个 HTML Datepicker,而无需使用花哨的 JAvascript 库。这是简单的演示:

    首先创建一个继承自 Dateinput 的 dateinput 字段:

     class DateInput(forms.DateInput):
         input_type = 'date'
    

    并像这样使用这个 DateInput 字段:

     class BookingRoomForm(ModelForm):
         class Meta:
             widgets = {'checkin':DateInput()}
             model = BookingRoom
             fields = ['checkin',]
    

    如果您不使用 ModelForm,请使用类似这样的小部件:

    class BookingRoomForm(ModelForm):
        checkin = forms.DateField(widget=DateInput())
        class Meta:
            model = BookingRoom
            fields = ['checkin',]
    

    输出将是这样的: enter image description here

    【讨论】:

      【解决方案4】:
      forms.DateField(widget=forms.DateInput(format=('%d-%m-%Y'),attrs={'class': 'datepicker', 'placeholder': 'Select a date', 'type': 'date'}))
      

      当输入类型没有改变时,这对我有用。

      【讨论】:

      • 请编辑您的答案并将代码放入代码块中。
      【解决方案5】:

      我做了不同的,

      在我将它应用到我的 ModelForm 的表单中

      class Form(forms.ModelForm):
          class Meta:
              model = MODEL
              fields = ['day']
              widget = {
                  'day': DateInput(attrs={'placeholder': 'Nome do tratamento',
                                               'id': 'id_day'})
              }
      

      在我的主要任务中,我申请了:

      <head>
          <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css" />
          <script src="http://code.jquery.com/jquery-1.8.2.js"></script>
          <script src="http://code.jquery.com/ui/1.9.0/jquery-ui.js"></script>
      </head>
      <body>
      Form here
      
      <script>
      $(function() {
          $( "#id_day" ).datepicker();
      });
      </script>
      
      </body>
      

      【讨论】:

        猜你喜欢
        • 2015-08-07
        • 1970-01-01
        • 2018-11-10
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多