Python 使用html5输入类型=';颜色';
我有一个模型Python 使用html5输入类型=';颜色';,python,django,html,django-models,Python,Django,Html,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” 我通过设置以下表单对象来尝试此操作: # forms.py from django.forms import ModelForm, C
# models.py
from django.db import models
class Foo(models.Model):
# ...
color = models.CharField(max_length=7, null=True)
color
应存储十六进制颜色。我想使用的不是input type=“text”
我通过设置以下表单对象来尝试此操作:
# forms.py
from django.forms import ModelForm, CharField
class FooForm(ModelForm):
class Meta:
model = Foo
widgets = {
'color': CharField(attrs={'type': 'color'}),
}
但是,这给了我以下错误消息
init()获得意外的关键字参数“attrs”
我做错了什么?我该如何做才对?如果您只需要更新
类型
属性,您需要更新小部件属性,它是用于:
我自己解决了。它的工作原理与我预期的差不多:
# 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
感谢-他指出我必须使用TextInput而不是CharField。
attrs
不是字段的参数,而是小部件的参数。好的,但他们不是这样做的吗:?还是我弄错了什么?谢谢!使用TextInput
而不是CharField
至少不会给我带来任何错误(我仍然不完全理解为什么CharField
是不可能的)。文档还说“还可以指定'type'属性以利用新的HTML5输入类型。为此,在创建小部件时使用Widget.attrs参数”()。我不知道你是如何使用TextInput小部件的。但是,如果您按照我的解决方案进行操作,它应该可以工作,请参见我正在执行的widget.attrs.update
,这实际上是在更新TextInput
的CharField
小部件的attr,该小部件的color
# views.py
from my_app.models import Foo
from my_app.forms import FooForm
class FooCreate(CreateView):
model = Foo
form_class = FooForm