Django - 操作数据从表单发布

时间:2013-02-24 19:06:52

标签: python django forms

我有一个Django表单都工作正常,但是我需要在用户发布表单后更新一个字段,我在想这应该在视图中完成?我的代码在下面是有问题的视图定义。

def edit_change(request, change_id):
change = get_object_or_404(Change, id=int(change_id))
form = ChangeForm(request.POST or None, instance=change)
change_id = Change.objects.get(id=int(change_id))

context = dict(change=change, id=change_id,form=form)



if form.is_valid():
    if form['change_id'] = ""
        form.['change_id'] = "TEST_NUM"

    cmodel = form.save()


    cmodel.save()
    return redirect(changes)

return render_to_response('editchange.html',context,   context_instance=RequestContext(request))

基本上我想查看change_id是否有值,如果没有添加值(日期+(当天的更改次数+ 1)),继续保存数据。

3 个答案:

答案 0 :(得分:2)

def edit_change(request, change_id):

    ............

    if form.is_valid():
        change_id = form.cleaned_data['change_id']

        cmodel = form.save()

        if not change_id:
            cmodel.change_id = "TEST_NUM"
            cmodel.save()
        return redirect(changes)

    return render_to_response('editchange.html',context,   context_instance=RequestContext(request)

答案 1 :(得分:1)

当您form.is_valid()时,您创建了一个form.data词典form.save()然后传入与model相关联的form。如果添加model_object = form.save(commit=False)的中间步骤,则创建一个模型实例,并填充所有form.data值。您可以根据需要更改和保存此模型实例。例如。 model_object.change_id = "TEST_NUM"。完成后,您可以使用model_object.save()完成,无需使用form.save()

此处提供更多详细信息:https://stackoverflow.com/questions/14982699/django-using-savecommit-false-to-add-user-id-to-a-form-dont-modify-save-or

答案 2 :(得分:0)

我会重新定义表单的clean方法,以便在cleaning_data dict中进行修改。