如何forms.py在django中使用www.example.com文件中的django-colorfield?

nwo49xxi  于 2023-01-21  发布在  Go
关注(0)|答案(4)|浏览(196)

我尝试使用Django-colorfield创建一个下拉菜单,可以从中选择颜色。但是,输出中的优先级部分只显示****。我尝试使用this answer,但它不起作用。Output,代码:<colorfield.fields.ColorField>**.I tried this answer but it didn't work. Output , Code:

#models.py

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

class Todo(models.Model):
    text = models.CharField(max_length=40)
    complete = models.BooleanField(default=False)
    COLOR_CHOICES = [
        ("#8b0000", "red"),
        ("#ffff00", "yellow"),
        ("#006400","green")
    ]

    priority = ColorField(choices=COLOR_CHOICES)
    
    
    def __str__(self):
        return self.text
#forms.py
from django import forms 
from colorfield.fields import ColorField
from .models import Todo

class TodoForm(forms.Form):
    text = forms.CharField(max_length=40,
    
        widget=forms.TextInput(
            attrs={'class' : 'form-control', 'placeholder' : 'Enter todo here', 'aria-label' : 'Todo', 'aria-describedby' : 'add-btn'}))

    COLOR_CHOICES = [
        ("#8b0000", "red"),
        ("#ffff00", "yellow"),
        ("#006400","green")
    ]

    priority = ColorField(choices=COLOR_CHOICES)
wz8daaqr

wz8daaqr1#

如果你想在你的模板中使用django-colorfield的颜色选择器(在Django管理之外),你只需要将字段设置为CharField并将ColorWidget小部件传递给它。
对于您的情况,这将是这样的:

class TodoForm(forms.Form):
    COLOR_CHOICES = ['#8b0000', '#ffff00', '#006400']
    text = forms.CharField(max_length=40, widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter todo here', 'aria-label': 'Todo', 'aria-describedby': 'add-btn'}))
    priority = ColorField(widget=ColorWidget(attrs={'palette': COLOR_CHOICES}))

请注意,您必须使用键paletteCOLOR_CHOICES as列表以及属性传递给ColorWidget,以便获得调色板。

eni9jsuy

eni9jsuy2#

ColorField只能在Django Admin中使用。如果你想在模板中使用颜色选择器,我建议创建CharField,比如:

priority = models.CharField(max_length=7)

在模板中添加添加一个JS插件来显示颜色选择器或使用HTML5颜色选择器,例如:

<input id="id_priority" maxlength="7" name="priority" type="color">
qkf9rpyu

qkf9rpyu3#

颜色=表单。字符字段(最大长度=7,小工具=文本输入(属性={“类型”:“颜色”,}))
这工作形式很好。

v8wbuo2f

v8wbuo2f4#

通过fallowing @Smort解决方案,我发现colorfield默认在前端(模板)工作,我们只需要根据需要将javascript文件转换为模板。
在模型中,我有:
标题颜色=颜色字段(默认值=“#FF0000”)
并且我使用的ModelForm只包含定义的字段,不需要其他任何东西

In forms.py
class MyForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ['header_color',]
        labels = {
            'header_color': 'My color',
        }
In template:
<!--    Colorfield-->
   <script src="{% static 'colorfield/jscolor/jscolor.js' %}"></script>
    <script src="{% static 'colorfield/colorfield.js' %}"></script>

相关问题