2015-10-19 100 views
0

學習如何使用Django。我想這樣的代碼:Django - 根據查詢更新或插入

if form.is_valid() and form.has_changed(): 
    try: 
     p = profile.objects.get(user_id= user.id) 
     #Append data to profile record 
        profile_record.save() 
    except p.DoesNotExist as e: 
     #Create new profile record 
     profile_record.save() 

user_id(FK場)未找到我得到一個錯誤:

local variable 'p' referenced before assignment

我認爲p = ...是分配?

謝謝你對我在做什麼錯誤的任何指針。

+0

什麼是'p',什麼是'profile_record'? – Wtower

回答

0

試圖篩選。獲得應該總是在情況下使用你知道有將在查詢時僅一個對象的查詢..

if form.is_valid() and form.has_changed(): 
     p = profile.objects.filter(user_id = user.id) 
     if p: 
      p = p[0] 
      #Append data to profile record 
      profile_record.save() 
     else: 
      #Create new profile record 
      profile_record.save() 

獲得(場=東西)總是會拋出錯誤,如果沒有結果,或超過1分的結果,而.filter()不能在這些情況下拋出錯誤。

+0

謝謝 - 也發現這個有用 – Chas

3

您的錯誤發生是因爲p是在try部分中第一次設置的。 On除外,你引用p,但p在這一點上還沒有被分配到任何東西,因爲如果達到except,那麼try部分就是「undone」,這就是p被賦值的地方。

嘗試改變except p.DoesNotExist as e:except Person.DoesNotExist:

+0

謝謝Zabari - 你的回答讓我明白我的錯誤。 – Chas

0

爲什麼不使用

if form.is_valid() and form.has_changed(): 
    form.save()