错误:Django'ChoiceField'对象没有属性'use_required_attribute'

时间:2017-07-15 20:27:20

标签: python django forms

这是我的模型(在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属性“required”就满足了。

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

1 个答案:

答案 0 :(得分: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'}),
    }

它有效!