【问题标题】:Which Django Form Field can provide me a HTML output of <input type="range" />?哪个 Django 表单字段可以为我提供 <input type="range" /> 的 HTML 输出?
【发布时间】:2018-04-11 10:27:19
【问题描述】:

我有一个带有此输入的 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'}))
  • 完美,这似乎有效。谢谢。
  • 但是对于最小值和最大值我认为你必须先检查一下,作为参考你可以看这里code.djangoproject.com/ticket/20674
  • 嗯,它每次都输出完全相同的值(默认值)——这可能是相关的吗?我在表单小部件中添加了minmax,但似乎没有做任何事情。任何想法?我在编辑中添加了更新后的代码。

标签: python django django-models


【解决方案1】:

两年!我来晚了

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

希望这可行 编辑: 如果你想显示它,你将需要一些 javascript,并在后端进行一些工作以将其转换为 Int

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 1970-01-01
    • 2018-05-27
    • 2019-11-09
    • 2012-06-10
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多