使用html5输入类型='颜色'

时间:2014-03-13 22:22:21

标签: python django html5 django-models

我有一个模特

# models.py
from django.db import models

class Foo(models.Model):
    # ...
    color = models.CharField(max_length=7, null=True)

color应存储十六进制颜色。而不是input type="text"我想使用html5 input type "color"

我通过设置以下表单对象来尝试这个:

# forms.py
from django.forms import ModelForm, CharField

class FooForm(ModelForm):
    class Meta:
        model = Foo
        widgets = {
                   'color': CharField(attrs={'type': 'color'}),
                   }

但是,这会给我以下错误消息

  

init ()获得了意想不到的关键字参数' attrs'

我做错了什么,我该怎么做?

2 个答案:

答案 0 :(得分:6)

自己解决了。它几乎像我预期的那样工作:

# models.py
from django.db import models

class Foo(models.Model):
    # ...
    color = models.CharField(max_length=7, null=True)

# forms.py
from django.forms import ModelForm
from django.forms.widgets import TextInput

class FooForm(ModelForm):
    class Meta:
        model = Foo
        widgets = {
                   'color': TextInput(attrs={'type': 'color'}),
                   }

对我来说棘手的部分并不是忘记在视图中正确设置:

# views.py
from my_app.models import Foo
from my_app.forms import FooForm

class FooCreate(CreateView):
    model = Foo
    form_class = FooForm

感谢aamir-adnan - 他指出我必须使用TextInput而不是CharField。

答案 1 :(得分:1)

如果您只需要更新type attr,则需要更新TextInput CharField的小部件attrs:

class FooForm(ModelForm):
    def __init__(self, *args, **kw):
        super(FooForm, self).__init__(*args, **kw)
        self.fields['color'].widget.attrs.update({
            'type': 'color',
        })

    class Meta:
        model = Foo