【问题标题】:using html5 input type='color'使用 html5 输入类型='颜色'
【发布时间】:2014-04-18 23:48:18
【问题描述】:

我有模特

# 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”

我做错了什么,我该如何做对?

【问题讨论】:

标签: python django html django-models


【解决方案1】:

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

# 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。

【讨论】:

    【解决方案2】:

    如果您只需要更新 type attr,则需要更新小部件 attrs,它是 TextInput for CharField

    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
    

    【讨论】:

    • 谢谢!使用TextInput 而不是CharField 至少不会给我任何错误(我仍然不完全理解为什么CharField 是不可能的)。该文档还说“还可以指定‘type’属性以利用新的 HTML5 输入类型。为此,您可以在创建小部件时使用 Widget.attrs 参数”(docs.djangoproject.com/en/1.6/ref/forms/widgets/…)。这不是更直接(但是,我没有成功尝试)。
    • 我不知道您是如何使用 TextInput 小部件的。但是,如果您遵循我的解决方案,它应该可以工作,请参阅我正在做 widget.attrs.update,这实际上是在更新 CharFieldTextInput 小部件的 attr color
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 2012-01-10
    • 2012-11-27
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多