【问题标题】:Error : Django 'ChoiceField' object has no attribute 'use_required_attribute'错误:Django 'ChoiceField' 对象没有属性 'use_required_attribute'
【发布时间】:2017-12-20 16:55:23
【问题描述】:

这是我的模型(在 models.py 中)

class Score(models.Model):

    ROUTINETYPE_CHOICE = (
        (0, 'R1'),
        (1, 'R2'),
        (2, 'F'),
    )

    routineType = models.IntegerField(choices=ROUTINETYPE_CHOICE)
    pointA = models.DecimalField(max_digits=3, decimal_places=1)
    pointB = models.DecimalField(max_digits=3, decimal_places=1)
    pointC = models.DecimalField(max_digits=5, decimal_places=3)

这是我的表单(在 forms.py 中)

class ScoreForm(forms.ModelForm):

    class Meta:
        ROUTINETYPE_CHOICE = (
            (0, 'R1'),
            (1, 'R2'),
            (2, 'F'),
        )

        model = Score
        fields = ('routineType', 'pointA', 'pointB', 'pointC')

        widgets = {
            'routineType': forms.ChoiceField(choices=ROUTINETYPE_CHOICE),
            'pointA': forms.TextInput(attrs={'placeholder': 'xx,xx', 'value': '0'}),
            'pointB': forms.TextInput(attrs={'placeholder': 'xx,xx', 'value': '0'}),
            'pointC': forms.TextInput(attrs={'placeholder': 'xx,xx', 'value': '0'}),
        }

而且我的看法很平常:

def score_create(request):

    if request.method == 'POST':
        form = ScoreForm(request.POST)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/score/')

    else:
        form = ScoreForm()

    context = {'form': form}
    return render(request, 'score_create.html', context)

当我尝试显示我的表单时,django 给我这个错误:

'ChoiceField' object has no attribute 'use_required_attribute'

use_required_attribute 在 Django 1.10 中是新的,我可以将其设置为 False。但它在表单级别,它会说我的其他字段也失去了 HTML required 属性。

我只有三种可能性(没有选择“虚拟”默认选项,例如“选择...”),所以我的 ChoiceField 始终选择一个选项,然后满足 HTML 属性“必需”。

有人知道另一种解决方案(除了设置use_required_attribute=False)吗?

【问题讨论】:

  • 字段不是小部件。

标签: python django forms


【解决方案1】:

感谢丹尼尔。这不是一个非常详细的答案,但是,你是对的。

widgets = {
    'routineType': forms.Select(attrs={'class': 'form-control col-sm-2'}),
    'pointA': forms.TextInput(attrs={'class': 'form-control col-sm-2', 'placeholder': 'xx,xx', 'value': '0'}),
    'pointB': forms.TextInput(attrs={'class': 'form-control col-sm-2', 'placeholder': 'xx,xx', 'value': '0'}),
    'pointC': forms.TextInput(attrs={'class': 'form-control col-sm-2', 'placeholder': 'xx,xx', 'value': '0'}),
    }

它的工作原理!

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 2017-01-22
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2018-09-13
    • 2011-06-23
    • 2013-01-27
    相关资源
    最近更新 更多