如何在 Django admin 中使用 HTML5 颜色选择器

Posted

技术标签:

【中文标题】如何在 Django admin 中使用 HTML5 颜色选择器【英文标题】:How to use HTML5 color picker in Django admin 【发布时间】:2017-02-13 00:40:50 【问题描述】:

我正在尝试在 Django 的管理页面中实现 html5 颜色选择器。

这是我的模型:

#model.py
...

class Category(models.Model):
    ...
    color = models.CharField(max_length=7)

这是表格:

#form.py
from django.forms import ModelForm
from django.forms.widgets import TextInput
from .models import Category

class CategoryForm(ModelForm):
    class Meta:
        model = Category
        fields = '__all__'
        widgets = 
            'color': TextInput(attrs='type': 'color'),
        

class CategoryAdminForm(ModelForm):
    form = CategoryForm

最后是管理员:

#admin.py
...
from .forms import CategoryAdminForm

...
class CategoryAdmin(admin.ModelAdmin):
    form_class = CategoryAdminForm
    filter_horizontal = ('questions',)
    fieldsets = (
        (None, 
            'fields': (('name', 'letter'), 'questions', 'color')
            ),
        )

但是,该字段的类型仍然是文本。如何在管理页面中将输入字段的类型更改为颜色?

【问题讨论】:

【参考方案1】:

我在文档中找到了答案:

forms.py 中的额外类是不必要的

#form.py
from django.forms import ModelForm
from django.forms.widgets import TextInput
from .models import Category

class CategoryForm(ModelForm):
    class Meta:
        model = Category
        fields = '__all__'
        widgets = 
            'color': TextInput(attrs='type': 'color'),
        

在管理员中:

#admin.py
...
from .forms import CategoryForm

...
class CategoryAdmin(admin.ModelAdmin):
    form = CategoryForm
    filter_horizontal = ('questions',)
    fieldsets = (
        (None, 
            'fields': (('name', 'letter'), 'questions', 'color')
            ),
        )

【讨论】:

【参考方案2】:

你可以使用这个库 https://github.com/jaredly/django-colorfield

安装:

运行pip install django-colorfieldcolorfield 添加到您的INSTALLED_APPS./manage.py collectstatic收集静态文件

用法:

在你的模型中,你可以这样使用它:

from django.db import models
from colorfield.fields import ColorField

class MyModel(model.Model):

     color = ColorField(default='#FF0000')

【讨论】:

无法使其工作(不显示字段)。我在forms.Form 中使用它而不是model.Model,这是为什么呢?有没有办法只在表单中使用它?【参考方案3】:

如果您想将颜色选择器添加到 forms.Form 而不是 model.Model 这将是要走的路:

from django import forms

class GaeParamsForm(forms.Form):
    hex_color = forms.CharField(label='hex_color', max_length=7,
        widget=forms.TextInput(attrs='type': 'color'))
    font_size = forms.IntegerField(label='font_size', 
        min_value=1, max_value=400)

这实质上是写输入HTML标签的type属性,即

<input id="id_hex_color" maxlength="7" name="hex_color" type="color">

您将收到带有 # 符号的十六进制字符串形式的数据,例如#ff0000.

【讨论】:

以上是关于如何在 Django admin 中使用 HTML5 颜色选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何在Django Admin Page中编辑请求的参数?

如何在django admin中为选定的字段制作“复制到剪贴板”按钮/链接?

如何在 django admin 中显示多个模型的更改列表?

如何在我的用户页面(HTML)中创建 django Admin 的 url

Django Admin Cookbook-8如何在Django admin中优化查询

Python学习第136天(Django的admin)