我在django 1.9中使用了一个模型表单,但是在widget中没有生成标签标记。不知道为什么会出现问题。
关于预付款,
这是py文件:
model.py:
class Account(models.Model):
pseudo = models.CharField(_('pseudo'), max_length=100)
password = models.CharField(_('password'), max_length=42)
email = models.EmailField(_('email'), null=True)
def __str__(self):
return self.pseudo
form.py:
class AccountForm(forms.ModelForm):
class Meta:
model = Account
fields = ('pseudo', 'password', 'email')
labels = {
'pseudo': _('Pseudo'),
'password': _('Password'),
'email': _('Email'),
}
widgets = {
'pseudo': forms.TextInput(attrs={
'class': 'form-control',
}),
'password': forms.PasswordInput(attrs={
'class': 'form-control',
}),
'email': forms.EmailInput(attrs={
'class': 'form-control',
}),
}
view.py:
def signup(request):
AccountFormSet = AccountForm()
if request.method == 'POST':
if AccountFormSet.is_valid():
AccountFormSet.save()
return render(request, 'account/signup.html', {'formset': AccountFormSet})
signup.html:
{% for form in formset %}
<div class="row">
<div class="form-group">
{{ form }}
</div>
</div>
{% endfor %}
输出是:
<input class="form-control" id="id_pseudo" maxlength="100" name="pseudo" type="text">
<input class="form-control" id="id_password" maxlength="42" name="password" type="password">
<input class="form-control" id="id_email" maxlength="254" name="email" type="email">
答案 0 :(得分:3)
您的变量名称令人困惑。您可以参考formset,但不是在任何地方使用formset。我建议改变观点如下:
def signup(request):
form = AccountForm()
if request.method == 'POST':
if form.is_valid():
form.save()
return render(request, 'account/signup.html', {'form': form})
然后在你的模板中,你循环遍历表单的字段,所以也要在那里更改变量。
如果要包含label标签,则需要明确包含{{ field.label_tag }}
。包含{{ field.errors }}
也是一个好主意。例如:
{% for field in form %}
<div class="row">
<div class="form-group">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
</div>
{% endfor %}
有关详细信息,请参阅rendering fields manually上的文档。
答案 1 :(得分:1)
虽然你已经将变量称为form_set,但它实际上并不是一个formset,它仍然只是你的单一形式。
AccountFormSet = AccountForm()
因此,您不会迭代一组表单,表单的迭代器将迭代字段。因此要么包含标签,要么只删除for循环
{% for field in formset %}
<div class="row">
<div class="form-group">
{{ field.label_tag }}
{{ field }}
</div>
</div>
{% endfor %}
<div class="row">
<div class="form-group">
<form>{{ form }}</form>
</div>
</div>