Указание атрибута виджета Django в ModelForm, а не в HTML <style>

У меня есть слайдер ввода Django, определенный следующим образом:

#widgets.py

from django.forms.widgets import NumberInput
class RangeInput(NumberInput):
    input_type = 'range'

#forms.py

from polls.widgets import RangeInput
class VoteForm(forms.ModelForm):
    class Meta:
        #model = CC_Responses
        model = CC_Resp_NoFK
        fields = ['Person_ID', 'Test_date', 'Response_value']
        # following added from SliderModelForm
        widgets ={
            'Response_value':RangeInput
        }

который "обрабатывается" представлением

def p2vote(request,q_id): 

    CC_question = get_object_or_404(CC_Questions, pk=q_id)
    #
    if request.method == 'POST':
        form = VoteForm(request.POST)
        if form.is_valid():
            item = form.save(commit=False)
            item.Q_ID = q_id
            item.save()
            return redirect('/polls/p2')
    else:
        formV = VoteForm()
    return render(request, 'pollapp2/vote.html', {'var_name':CC_question,'form' : VoteForm()})

и в шаблоне у меня есть встроенный CSS

<style>
    /* Following CSS is used by the input slider (range) since Django assigns id value of id_Response_value */
    /*See: https://stackoverflow.com/questions/110378/change-the-width-of-form-elements-created-with-modelform-in-django */
    #id_Response_value{width:300px;} 
</style>

который связан с ползунком/диапазоном

<label for="Response_value">Response value</label>
{% render_field form.Response_value rows="1" class="form-control" %}

Я получил значение id_Response_value, посмотрев на источник отрисованного HTML в браузере - полагаю, я мог бы явно задать ID. Все вышеописанное работает именно так, как я хочу. Я могу управлять шириной ползунка диапазона с помощью CSS.

Теперь, я считаю, что инлайн CSS - это "плохая вещь", поэтому в качестве шага по улучшению своего кода я пытаюсь связать атрибут "более непосредственно" со слайдером.

В документации Django в разделе: https://docs.djangoproject.com/en/4.0/topics/forms/modelforms/#overriding-the-default-fields

есть следующий пример:

from django.forms import ModelForm, Textarea
from myapp.models import Author

class AuthorForm(ModelForm):
    class Meta:
        model = Author
        fields = ('name', 'title', 'birth_date')
        widgets = {
            'name': Textarea(attrs={'cols': 80, 'rows': 20}),
        }

Созданный словарь attrs выглядит так, будто в нем есть CSS "штуки", поэтому я закодировал виджеты в форме модели в forms.py

from polls.widgets import RangeInput
class VoteForm(forms.ModelForm):
    class Meta:
        model = CC_Resp_NoFK
        fields = ['Person_ID', 'Test_date', 'Response_value']
        widgets ={
            'Response_value':RangeInput(attrs={'width': '1000px'}),
        }

Я пробовал оба варианта:

attrs={'width': '1000px'}

и

attrs={'width': 1000}

Ни то, ни другое не изменило ширину ползунка диапазона. Возможно ли то, что я делаю, в (модельной)форме? Может быть, у меня просто проблема с тем, что я кодирую в attrs?

Возможно, я неправильно понял, но я вижу что-то вроде следующего продвигаемого как то, что должно быть в ModelForm

def __init__(self, *args, **kwargs):
    super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
    self.fields['long_desc'].widget.attrs['cols'] = 10
    self.fields['long_desc'].widget.attrs['rows'] = 20

Нет. Правда? Чтобы изменить атрибуты?

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