Django不允许我用这个视图函数创建一个新的模型对象。怎么了?
我通过POST提交了一个表单,我试图用Django中的这个视图在我的数据库中创建一个新的模型对象。它不起作用了。有人能告诉我这个函数看起来是否正常吗 多谢各位Django不允许我用这个视图函数创建一个新的模型对象。怎么了?,django,forms,views,geodjango,Django,Forms,Views,Geodjango,我通过POST提交了一个表单,我试图用Django中的这个视图在我的数据库中创建一个新的模型对象。它不起作用了。有人能告诉我这个函数看起来是否正常吗 多谢各位 @csrf_exempt def UploadTest(request): if request.method == 'POST': form = TestForm(request.POST) response = {} if form.is_valid():
@csrf_exempt
def UploadTest(request):
if request.method == 'POST':
form = TestForm(request.POST)
response = {}
if form.is_valid():
response["status"] = "OK"
new_point = MyModel()
cd = form.cleaned_data
coordinates = cd['coordinates'].split(',')
new_point.pt = Point(float(coordinates[0]), float(coordinates[1]))
new_point.name = cd['name']
new_point.point_type = cd['point_type']
new_point.description = cd['description']
new_point.save()
else:
response["status"] = "bad"
response.update(form.errors)
s = StringIO()
json.dump(response, s)
s.seek(0)
return HttpResponse(s.read())
else:
form = TestForm()
return render_to_response('upload.html', {'form': form })
更新:我没有发现问题,但我重新创建了我的数据库,它工作了!谢谢大家,很抱歉占用了你们的时间!任何管理员都可以随意删除此帖子。您正在
if request.method==“POST”
if语句中定义表单,这意味着如果请求方法不是POST,表单将被取消定义,这将阻止您的查看功能工作
编辑:忽略我,由于格式问题,我错过了else
语句。更新:
实际上,我认为您需要在视图上使用sure_csrf_cookie()而不是csrf_emption(),因为它看起来像是在做一篇ajax文章
旧答案:
点没有被保存。你应该创建它。保存它。然后设置新的_point.pt
if form.is_valid():
response["status"] = "OK"
new_point = MyModel()
cd = form.cleaned_data
coordinates = cd['coordinates'].split(',')
new_point_object = Point(float(coordinates[0]), float(coordinates[1]))
new_point_object.save()
new_point.pt = new_point_object
new_point.name = cd['name']
new_point.point_type = cd['point_type']
new_point.description = cd['description']
new_point.save()
嗯。所以除了许多人提出的点save(我不认为这是根本问题)之外,这个函数中不应该有任何格式或语法错误,对吗?从理论上讲,它应该有效吗
这样我就可以集中精力调试其余的
这与我试图实现的观点相同,但有一些修改:
谢谢 你有错误吗?没有。没有错误。更像是什么都没发生。没有响应,也不会创建新对象。如果我清除了“If form is valid”(如果表单有效)下除响应之外的所有内容,那么我将返回一个响应。因此,我的模板中的javascript POST函数似乎起作用了。您忘记保存点()
-在将其分配到新点之前尝试保存pt
,表单是否真的有效?你能确认你的文章(我编辑的)中的缩进吗?谢谢你的回答。是的,我认为表单是有效的,因为我没有得到验证错误,如果我将字段留空,我会得到这些错误。不知道你是什么意思?是的,压痕看起来不错。谢谢你的编辑,我在stackoverflows系统上遇到了一些问题。谢谢你的回答!我试过你的第一个答案,但它不起作用:/我会检查CSRF的东西,因为我认为我试过了,没有点和尼瑟的作用。不,确保没有太大的区别。谢谢你。我想你可能需要在你的表格上提供更多的信息!我添加了一个表单和模型。请看一看,看有没有什么奇怪的东西。