我通过POST提交表单,我试图在Django中使用此视图在我的数据库中创建一个新的模型对象。它不起作用。有人能告诉我这个功能是否正常?
非常感谢!
@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 })
更新:我没有找到问题但是我重新创建了数据库并且工作正常!谢谢大家,抱歉占用你的时间!任何管理员都可以随意删除此POST。
答案 0 :(得分:0)
<强>更新强>
实际上,我认为您需要在视图上使用ensure_csrf_cookie()而不是csrf_exempt(),因为它看起来像是在做一个ajax帖子。
https://docs.djangoproject.com/en/1.6/ref/contrib/csrf/#page-uses-ajax-without-any-html-form
旧答案:
没有保存点。你应该创建它。保存。然后设置new_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()
答案 1 :(得分:0)
行。所以除了许多人提出的Point-save(我认为这不是根本问题)之外,它不应该是这个函数中的任何格式或语法错误,对吧?理论上它应该有用吗?
这样我就可以集中精力调试剩下的......
这是我试图实现的相同观点,但经过一些修改:http://ipasic.com/article/let-user-add-point-map-geodjango-leaflet/
谢谢!
答案 2 :(得分:-1)
您在form
if语句中定义if request.method == "POST"
,这意味着如果请求方法不是post,则表单将是未定义的,这将阻止您的视图函数工作。
编辑:忽略我,由于格式化,我错过了else
语句。