2012-08-29 27 views
0

這是一個理智的方法來進行備份和更新原件?這會創建一個備份並更新原始的Django對象嗎?

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

回答

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,我認爲它現在更明顯。

+0

「它工作嗎?」那麼......我還沒有嘗試過,因爲我對它的工作有懷疑(如果是這樣的話,如果這是最好的方法)。謝謝您的幫助! – Ubuntourist

相關問題