Django不会让我用这个视图函数创建一个新的模型对象。怎么了?

时间:2014-01-30 16:13:33

标签: django forms views geodjango

我通过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。

3 个答案:

答案 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语句。