Django Forms: Атрибуты к элементу Select не применяются?

У меня есть Django Model Form, которую я отображаю в модальном окне. Она отображается нормально и у меня нет проблем , за исключением стилизации одного из выпадающих элементов .

Я могу добавлять/удалять классы в другие поля формы без проблем - но виджет Select не использует атрибуты, которые я ему даю.

Мой вопрос:

Виджет select в форме модели Django не применяет правильные классы

Мои попытки исправить:

  • Я пробовал устанавливать атрибуты методом __init__
  • Устанавливал их так, как они есть сейчас (это рекомендованный метод из документации)
  • Создание другой модели для расширения виджета Select, как описано здесь на SO

Мой код:

forms.py:

class EvaluationForm(forms.ModelForm):
    """Form definition for Evaluation."""

    # THESE ATTRS LOAD FINE AND CLASSES APPLIED AS EXPECTED
    evaluation_date = forms.CharField(
        max_length=100,
        widget=forms.TextInput(attrs={"class": "form-control test"}),
    )
    # THESE ATTRS ARE NOT BEING APPLIED TO THE SELECT WIDGET - NO CLASSES APPLIED
    evaluation_level = forms.ModelChoiceField(
        queryset=EvaluationLevel.objects.all(),
        widget=forms.Select(
            attrs={"class": "form-control something something-else"}
        ),
    )

    class Meta:
        """Meta definition for Evaluationform."""

        model = Evaluation
        fields = [
            "summative",
            "evaluation_type",
            "evaluation_level",
            "evaluation_date",
        ]
        widgets = {
            "summative": forms.HiddenInput(),
            "evaluation_type": forms.HiddenInput(),
        }

шаблон html, который отображает форму:

{% if form.non_field_errors %}
    <ul>
        {% for error in form.non_field_errors %}
            <li>{{ error }}</li>
        {% endfor %}
    </ul>
{% endif %}

{% for hidden_field in form.hidden_fields %}
    {% if hidden_field.errors %}
        <ul>
            {% for error in hidden_field.errors %}
                <li>
                    (Hidden field {{ hidden_field.name }}) {{ error }}
                </li>
            {% endfor %}
        </ul>
    {% endif %}

    {{ hidden_field }}

{% endfor %}

{% for field in form.visible_fields %}
    <div id="{{field.auto_id}}FormGroup" class="form-group">

        <label class="form-label" for="{{ field.id_for_label }}">{{ field.label }}</label>

        {{ field }}

        {% if field.help_text %}
            <p class="help">{{ field.help_text|safe }}</p>
        {% endif %}

        <div class="invalid-feedback">
            This field is required.
            {% for error in field.errors %}

                {{ error }}

            {% endfor %}
        </div>

    </div>
{% endfor %}

Соответствующие модели:

class Evaluation(CreateUpdateMixin, CreateUpdateUserMixin):
    """
    Model definition for Evaluation.
    """

    summative = models.ForeignKey(Summative, on_delete=models.PROTECT)
    evaluation_type = models.ForeignKey(
        EvaluationType, on_delete=models.PROTECT
    )
    evaluation_level = models.ForeignKey(
        EvaluationLevel, on_delete=models.PROTECT
    )
    evaluation_date = models.DateField(
        auto_now=False, auto_now_add=False, null=True, blank=True
    )
    published = models.BooleanField(default=False)
    employee_locked = models.BooleanField(default=False)
    admin_locked = models.BooleanField(default=False)
    admin_locked_by_id = models.IntegerField(null=True, blank=True)

    objects = models.Manager()
    managers = EvaluationManager()

    class Meta:
        """Meta definition for Evaluation."""

        verbose_name = "Evaluation"
        verbose_name_plural = "Evaluations"

Мой вопрос:

Как заставить виджет Select правильно применить к нему нужные классы? Я пытаюсь добавить стилизацию Bootstrap к виджету.

Вернуться на верх