Django добавить спецификацию c атрибут для выбора формы - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть две модели:

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)

В моей ModelForm для 'DesignOverride' я вызываю 'x_font', используя виджет select:

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_value параметров Font.

Я попытался l oop в ' Поле выбора x_font 'в шаблоне, но кажется, что оно содержит только опции в виде строки (и поэтому потеряло информацию о' css_value ').

1 Ответ

0 голосов
/ 29 февраля 2020

Я создал переопределение виджета Select следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...