Какое поле формы django может предоставить мне html-вывод <input type = "range" />?

У меня есть html-форма с этим вводом:

    <input id="duration_slider" type="range" min="1" max="168" value="48" />

Однако теперь я хотел бы преобразовать этот слайдер в поле формы django, чтобы я мог использовать его в форме Django. Имя поля - duration, поэтому я заменю id на id=id_duration.

Как будут выглядеть мои модели models.py и forms.py для этого поля?

На данный момент это просто:

class AdvertisePost(Post):
    ...
    duration = models.IntegerField(default=48)

    def __str__(self):
        return self.title

class AdvertisePostForm(forms.ModelForm):
    duration = ?

    class Meta:
        model = AdvertisePost
        fields = [
            ...
            #'duration'    
        ]

РЕДАКТИРОВАТЬ

взгляды

if options_form.is_valid():
    instance = options_form.save(commit=False)
    print(instance.duration) #prints the default value every time

поле формы

duration = forms.IntegerField(widget=forms.NumberInput(attrs={'type':'range', 'step': '1', 'min': '1', 'max': '148'}), required=False)

Попробуйте вот так: forms.IntegerField(widget=NumberInput(attrs={'type':'range', 'step': '2'}))

Vikas P 11.04.2018 12:34

Отлично, похоже, это работает. Благодарю.

Zorgan 11.04.2018 12:44

но для min и max, я думаю, вам нужно проверить раньше, для справки вы можете посмотреть здесь code.djangoproject.com/ticket/20674

Vikas P 11.04.2018 13:08

Хм, он каждый раз выводит одно и то же значение (значение по умолчанию) - может ли это быть связано? Я добавил min и max в виджет формы, но, похоже, ничего не делает. Любая идея? Я добавил обновленный код в свое редактирование.

Zorgan 11.04.2018 13:52
3
4
2 796
1

Ответы 1

Два года! Я очень поздно

class AdvertisePostForm(forms.ModelForm):
     class Meta:
         model = AdvertisePost
         fields = ['duration', ...]
         widgets = {
         'duration': forms.TextInput(attrs={'type': 'range'})
         }

Надеюсь, это сработает редактировать: Вам понадобится javascript, если вы хотите отобразить его, и некоторая работа на стороне бэкэнда, чтобы превратить его в Int

Другие вопросы по теме