Python Django ModelForm未能保存
我有一个Django模型,如下所示:Python Django ModelForm未能保存,python,django,Python,Django,我有一个Django模型,如下所示: def postproperty(request): context = RequestContext(request) if request.method == 'POST': form = PostForm(request.POST, request.FILES) if form.is_valid(): form.save(commit=True) retur
def postproperty(request):
context = RequestContext(request)
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit=True)
return HttpResponseRedirect(reverse('postthanks'))
else:
print form.errors
else:
form = PostForm()
content = {'form': form}
return render_to_response('postproperty.html', content, context)
models.py
class Property(models.Model):
id = models.AutoField(unique=True, primary_key=True)
name = models.CharField(max_length=500)
desc = models.CharField(max_length=2000)
address_line1 = models.CharField(max_length=200)
address_line2 = models.CharField(max_length=200)
locality = models.CharField(max_length=200, default=0)
city = models.CharField(max_length=200)
state = models.CharField(max_length=200)
pin = models.BigIntegerField(max_length=200)
phone = models.BigIntegerField(max_length=20)
secondary_number = models.BigIntegerField(max_length=20, blank=True)
image = models.ImageField(upload_to='dynamic/img')
square_feet = models.BigIntegerField(max_length=200, default=0)
price = models.BigIntegerField(max_length=200, default=0)
NO = 'NO'
YES = 'YES'
APPROVAL = ((NO, 'no'), (YES, 'yes'))
active = models.CharField(choices=APPROVAL, default=NO, max_length=3)
def __unicode__(self):
return self.name
此模型的模型形式:
class PostForm(forms.ModelForm):
name = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter name for Property'}), required=True)
desc = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control input-area', 'placeholder': 'Enter a small description', 'rows': '5', 'style': 'resize:none;'}), required=True)
address_line1 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter first line of address'}), required=True)
address_line2 = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter second line of address'}), required=True)
locality = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter locality'}), required=True)
city = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter city name'}), required=True)
state = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter state name'}), required=True)
pin = forms.IntegerField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter pincode'}), required=True)
phone = forms.IntegerField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter contact number'}), required=True)
secondary_number = forms.IntegerField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter secondary contact number'}), required=False)
image = forms.FileInput()
square_feet = forms.IntegerField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter area of property in square feet'}), required=True)
price = forms.IntegerField(widget=forms.TextInput(attrs={'class': 'form-control input-area', 'placeholder': 'Enter price of property in Rupees'}), required=True)
NO = 'NO'
YES = 'YES'
APPROVAL = ((NO, 'no'), (YES, 'yes'))
active = forms.CharField(widget=forms.HiddenInput(), initial=NO)
class Meta:
model = Property
我的views.py如下所示:
def postproperty(request):
context = RequestContext(request)
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit=True)
return HttpResponseRedirect(reverse('postthanks'))
else:
print form.errors
else:
form = PostForm()
content = {'form': form}
return render_to_response('postproperty.html', content, context)
该模板包含以下内容:
<form id="property_form" method="POST" action="">
{% csrf_token %}
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.help_text}}
{{ field }}
{% endfor %}
<input type="submit" name="submit" value="Add Property" class="btn btn-info test-button" style="margin-top:20px;"/>
</form>
{%csrf_令牌%}
{%if form.errors%}
请更正下面的错误{form.errors | pluralize}}。
{%endif%}
{%用于隐藏在表单中。隐藏的_字段%}
{{隐藏}}
{%endfor%}
{%form.visible_fields%}
{{field.help_text}
{{field}}
{%endfor%}
表单在模板中正确呈现。当我从模板中保存表单时,它会告诉我,请更正下面的错误。没有指定错误,我不知道哪个字段似乎给了我错误。
谢谢你的帮助
编辑:
正如Daniel所说,我在模板中添加了{{field.errors}
和{{form.non_field_errors}}
。它在图像字段中显示错误。为什么会这样 嗯,模板中没有显示任何错误。除了每个字段和标签之外,您还应该在表单的to处添加{{field.errors}
,再加上{{form.non_field_errors}}
。需要将其添加到模板中:
这样做,会给图像字段带来一个错误,它说图像字段是必需的