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

she*_*nga 11 python django html5

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

这是我的模型:

#model.py
...

class Category(models.Model):
    ...
    color = models.CharField(max_length=7)
Run Code Online (Sandbox Code Playgroud)

这是表格:

#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
Run Code Online (Sandbox Code Playgroud)

最后是管理员:

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

...
class CategoryAdmin(admin.ModelAdmin):
    form_class = CategoryAdminForm
    filter_horizontal = ('questions',)
    fieldsets = (
        (None, {
            'fields': (('name', 'letter'), 'questions', 'color')
            }),
        )
Run Code Online (Sandbox Code Playgroud)

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

she*_*nga 25

我在文档中找到了答案:

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'}),
        }
Run Code Online (Sandbox Code Playgroud)

在管理员:

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

...
class CategoryAdmin(admin.ModelAdmin):
    form = CategoryForm
    filter_horizontal = ('questions',)
    fieldsets = (
        (None, {
            'fields': (('name', 'letter'), 'questions', 'color')
            }),
        )
Run Code Online (Sandbox Code Playgroud)


小智 11

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

安装:

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

用法:

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

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

class MyModel(model.Model):

     color = ColorField(default='#FF0000')
Run Code Online (Sandbox Code Playgroud)