0

これは、バックアップを作成して元のファイルを更新するための正しいアプローチですか?

    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()
4

1 に答える 1

3

それはまったく機能していますか?コピーが適切に保存されているかどうかを尋ねています。私にはそうではないように見えるためです。force_insertは実際に言うことを実行します。SQLではUPDATEではなくINSERT要求を行うだけです。必要なのはコピーを作成することです-あなたはそれを次のように行うことができます:

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そして私はそれが今何をしているのかがより明白だと思います。

于 2012-08-29T21:38:57.673 に答える