我一直无法通过搜索找到问题的解决方案。所以我想问一下我的代码可能有什么问题。我尝试从forms.ModelForm
验证表单,但在我的视图函数中,它无法通过form.is_valid()。打印form.errors给了我:
<li>title<ul class="errorlist"><li>This field is required.</li></ul>
型号:
class Paper(models.Model):
title = models.CharField(max_length=100, help_text='Hello World!')
forms.FormModel
class eventCreateForm(forms.ModelForm):
class Meta:
Model = Paper
fields = ['title']
widgets = {
'title': forms.TextInput(attrs={'class' :'form-control', 'placeholder' : 'Place title'}),
}
浏览
def create_paper(request):
context = {}
if request.method == 'POST':
form = paperCreateForm(request.POST or None, request.FILES or None)
if form.is_valid():
form_data = form.cleaned_data
t1 = form_data['title']
print(t1)
else:
context['create_paper_form'] = form
form_template = "user/paper-event-template.html"
return HttpResponse(render_to_string(form_template, {'context' : context}))
表单已经过验证,而在else子句中,当尝试从cleaned_data
我确实尝试打印表单,它显示:
<tr><th><label for="id_title">Title:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input class="form-control" id="id_title" maxlength="100" name="title" placeholder="Place Title" type="text" required /></td></tr>
但它不包含任何值,我想它应该:我使用jax方法发送表单数据:
AJAX
$('#create_paper_form_id').submit(function (event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "{% url 'Eapp:create_paper' %}",
data: {
csrfmiddlewaretoken : '{{ csrf_token }}',
form_data : $('#create_paper_form_id').serializeArray(),
},
success: function (data) {
console.log(data);
$('.create-paper').html(data);
},
error: function() {
console.log('err');
}
});
});
HTML
<div class="create-paper">
<div class="container-fluid">
<form class="form" id="create_paper_form_id" novalidate="novalidate" action="{% url 'Eapp:create_event' %}" method="POST">
{% for field in create_paper_form %}
<div class="form-group">
<div class="col-xs-12">
{{ field.label_tag }}
</div>
<div class="col-xs-12">
{{ field }}
</div>
<div class="col-xs-6">
{{ field.help_text }}
</div>
<div class="col-xs-6">
{{ field.errors }}
</div>
</div>
{% endfor %}
<div class="form-group">
<div class="col-xs-6 col-sm-6 col-md-2 col-lg-2">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
答案 0 :(得分:3)
这是预期的行为,cleaned_data
只有在有效的表单上才有实际清理过的数据。
form.data
仍可用,您可以使用它。
引用manual:
Form实例有一个is_valid()方法,它运行验证 所有领域的惯例。调用此方法时,如果是所有字段 包含有效数据,它将:
- return True
- 将表单的数据放入其cleaning_data属性中。
[edit]正如@ fazil-zaid所提到的,您需要在model
课程中加入Meta
才能使其成为modelform
。