这是我的模型(在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
)吗?
答案 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'}),
}
它有效!