【问题标题】:How can I override the 'type' attribute of a ModelForm in Django?如何在 Django 中覆盖 ModelForm 的“类型”属性?
【发布时间】:2012-10-17 03:44:00
【问题描述】:

具体来说,我想在表单中呈现日期小部件,但我希望它“成为”HTML5(这样我就可以忘记 javascript 或其他任何东西,并信任 Chrome、Opera 和 Safari 来显示日期选择器)。

请不要使用javascript解决方案,我已经在网上找到了。

这是我的代码的 sn-p,但它仍然将表单字段 thedate 的类型属性作为“文本”。

#models.py

class MyModel(models.Model):
    user = models.ForeignKey(User)
    thedate = models.DateField()

#forms.py

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        widgets = {
            'thedate': TextInput(attrs={'type': 'date'}),
        }

谁能给我点灯?

提前致谢。

【问题讨论】:

    标签: python django html django-widget


    【解决方案1】:

    使用 django-html5

    1. 安装django-html5:pip install django-html5

    2. 在 forms.py 中,import html5.forms.widgets as html5_widgets

    3. 设置widgets['thedate'] = html5_widgets.DateInput

    我没有亲自测试它,因为我刚刚发现了诀窍,但多亏了你,我可能会使用它:D

    只需覆盖 input_type

    您也可以制作自己的小部件,想法如下:

    from django import forms
    
    class Html5DateInput(forms.DateInput):
        input_type = 'date'
    

    详情请参考django/forms/widgets.py ;)

    【讨论】:

      【解决方案2】:

      这是一个简单的:

      将此代码放在 form.py 的任何位置

      forms.DateInput.input_type="date"
      forms.DateTimeInput.input_type="datetime-local" 
      

      【讨论】:

      • 非常肮脏但高效。您为整个应用更改此值。猴子补丁风格虽然。既不是 pythonic 也不是 django 风格。
      • 像魅力一样工作。
      • 应该从一开始就更容易。我需要它工作,所以我使用它:)
      【解决方案3】:

      这是一个基本上jpic的解决方案的代码sn-p,也是我在这里寻找答案后使用的-->

      class EmailTextInput(django.forms.widgets.TextInput):
          """Subclass TextInput since there's no direct way to override its type attribute"""
          input_type ='email'
      
      class MyModelForm(ModelForm):
          class Meta:
              model = MyModel
              widgets = {
                  'thedate': EmailTextInput()
              }
      

      【讨论】:

        猜你喜欢
        • 2015-03-15
        • 2017-08-22
        • 2016-03-20
        • 2013-04-05
        • 2017-05-07
        • 2020-11-05
        • 2011-07-12
        • 2012-01-31
        • 2012-04-10
        相关资源
        最近更新 更多