Django为表单选择选项添加特定属性

2024-05-06 03:34:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型:

class Font(models.Model):
    name = models.CharField(max_length=64)
    css_value = models.CharField(max_length=128)

    def __str__(self):
        return self.name


class DesignOverride(models.Model):
    x_font = models.ForeignKey(Font, null=True, blank=True, on_delete=models.SET_NULL)

在“DesignOverride”的模型表单中,我使用小部件选择调用“x_字体”:

class DesignOverrideForm(forms.ModelForm):

    class Meta:
        model = DesignOverride
        fields = ['x_font']
        widgets = {
            'x_font': forms.Select(attrs={ 'class': 'form-control'})
        }

我想知道Django是否有办法定制我的选项,给它们一个样式“font-family:X”,其中X是选项字体的css\u值

我试图在模板中的“x_字体”选择字段中循环,但它似乎只有作为字符串的选项(因此丢失了有关“css_值”的信息)


Tags: name模型selfmodelmodels选项字体length
1条回答
网友
1楼 · 发布于 2024-05-06 03:34:47

我创建了一个选择小部件覆盖,如下所示:

class FontSelect(forms.Select):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
        option = super(FontSelect, self).create_option(name, value, label, selected, index, subindex=None, attrs=None)

        if option['value']:
            option['attrs']['style'] = "font-family: '" + Font.objects.get(pk=option['value']).css_value + "'"
        print(option)
        return option

相关问题 更多 >