【发布时间】:2013-06-12 00:48:43
【问题描述】:
我正在尝试使用 ModelForm 创建一个对象并将其保存到我的数据库中,但我不断收到 ValueError,告诉我在提交 POST 数据后我的数据未经过验证。
这在models.py中
class Hydrant(models.Model):
gpscoord = models.OneToOneField(GPSCoord)
address = models.OneToOneField(Address)
size = models.DecimalField(max_digits=10, decimal_places=3)
def __unicode__(self):
return '(' + str(self.gpscoord.latitude) + ', ' + str(self.gpscoord.longitude) + ')'
class HydrantForm(ModelForm):
class Meta:
model = Hydrant
这是在views.py中
def hydrant_create(request):
if request.method == 'POST':
form = HydrantForm(request.POST)
new_hydrant = form.save() #it breaks here
return HttpResponseRedirect(reverse('hydrant_detail', args=(new_hydrant.id,)))
else:
form = HydrantForm() #unbound form
return render(request, 'structures/hydrant_create.html', {'form': form})
这是 hydrant_create.html
<h3> Creating Hydrant</h3>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'hydrant_create' %}" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
在“structures/hydrants/create”处,我的 html 模板看起来不错(尽管我只能选择已经创建的 GPSCoord 和 Address 对象——有没有简单的解决方法?)。但是,一旦我在表单上输入数据并单击提交,我就会得到:
ValueError 在 /structures/hydrants/create/
无法创建消火栓,因为数据未经验证。
我浏览了 StackOverflow,但其他人遇到的主要问题是将新对象的创建和现有对象的修改分开(我有两个视图来处理这个问题,并且“编辑”视图运行相同问题在同一个地方。
谢谢!
【问题讨论】:
标签: django django-forms