2012-10-22 80 views
0

當我使用URL中的id參數編輯記錄,並且使用request.GET中的「elif'id」時,它不更新記錄,但它創建一個新的行Django表單插入記錄而不是更新

@login_required 
def login_save_page(request): 
    if request.method == 'POST': 
     form = LoginSaveForm(request.POST) 
     if form.is_valid(): 
      # Create or get login. 
      login1 = _login_save(request, form) 
      return HttpResponseRedirect(
             '/user/%s/' % request.user.username 
             ) 
    elif 'id' in request.GET: 
    id2 = request.GET['id'] 
    name='' 
    url='' 
    Login_username ='' 
    notes= '' 
    password='' 
    try: 
     login1 = login.objects.get(
            id = id2, 
            username=request.user 
           ) 
     name = login1.name 
     url = login1.loginUrl 
     Login_username = login1.login_username 
     notes = login1.notes 
     password = login1.password 
    except (login.DoesNotExist): 
     pass 
    form = LoginSaveForm({ 
     'id': id2, 
     'name': name, 
     'url': url, 
     'Login_username': Login_username, 
     'notes': notes, 
     'password': password 
    }) 
    else: 
     form = LoginSaveForm() 
    variables = RequestContext(request, { 
            'form': form 
              }) 
    return render_to_response('login_save_page.html', variables) 

回答

0

我假設你的形式通過POST提交因而elif的「GET」永遠當你需要它觸發(當用戶提交表單)。

您需要將該邏輯放在if request.method == 'POST'塊內。

想想那個「elif」塊會觸發的時間。只有當請求方法不是POST時,這意味着僅在頁面加載時。

+0

如果我這樣做,當我在url上使用id參數我不會得到該記錄的當前字段值,並且還會生成一條新記錄。這是我改變,如果我誤解了你http://pastebin.com/fZ2ZL7Kp – Dimitris

+0

啊,這個難題有兩個部分。一個是get()塊需要在GET中填充記錄,並且在POST期間它還需要拉動記錄並執行不同的save()操作。我可能只是建議你使用'ModelForm',它可以通過傳遞一個實例來修改(或不是)來區分更新和插入。 –

相關問題