这会创建备份并更新原始的Django对象吗?

时间:2012-08-29 21:31:35

标签: django django-models django-forms

这是一种理智的方法来备份和更新原始文件吗?

    project = Project.objects.get(pk=project_id)                  
# ...
    if request.method == "POST": # If the form has been submitted...           
        project_form = ProjectForm(request.POST, instance=project)
        if  project_form.is_valid():
            project.save(force_insert=True)    # Make a backup copy

            updated_project = project_form.save(commit=False)
            updated_project.editor_id = editor_id
            if request.POST["beginyear"]:  by = int(request.POST["beginyear"])
            if request.POST["beginmonth"]: bm = int(request.POST["beginmonth"])
            if (by > 0) and (bm > 0):
                updated_project.begin_date = "%4.4d-%2.2d-01" % (by,bm,)
# ...
            updated_project.save()

1 个答案:

答案 0 :(得分:3)

它有效吗? 我问的是复制是否正确保存,因为对我来说它看起来不是:force_insert执行它实际上说的 - 它只是在SQL中发出INSERT请求而不是UPDATE。 你需要的是复制 - 你可以这样做:

project.pk = None
project.save()

如果你不介意的话,我也会稍微重构一下:

by = request.POST.get("beginyear")
bm = request.POST.get("beginmonth")
if by and bm:
    try:
        updated_project.begin_date = datetime.datetime(year=int(by), month=int(bm), day=1)
    except ValueError:
       #some handling here
       pass

所以现在你不必初始化bybm,我认为它现在做的更为明显。