2015-05-05 76 views
0

我可能會因爲我在這裏沒有看到問題而倦怠,並且我確信它是一件小事。用戶外鍵Django保存表格

我有一個模型表單誰是模型是配置文件(配置文件是用戶通過網站上的許多表單,通常工作)。在這種特殊的形式中,我只使用一個字段。當我嘗試保存它時,它會中斷:「user_id」列中的空值違反了非空約束。用戶是Profile模型上的外鍵。

我有類似的形式/視圖,只處理配置文件模型的一個字段和保存工作好吧。我正在比較代碼,而我根本看不出有什麼不同。正如我所說,我可能會被燒壞一點。

這是我的形式:

class CompleteRegistration(forms.ModelForm): 
    class Meta: 
     model = Profile 
     fields = ('resume',) 

這是視圖:

def complete_registration(request): 
    if request.method == "POST": 
     form = CompleteRegistration(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect(request.GET.get('next', '')) 
    else: 
     form = CompleteRegistration() 

    context = { 
     'form': form 
    } 

    return render_to_response('accounts/complete_registration.html', context, RequestContext(request)) 

它應該是很簡單的,但我明顯失去了一些東西。 Profile模型也有一個uuid字段。它存在於失敗的行中,這讓我更加困惑。爲什麼有一個uuid和沒有用戶?有任何想法嗎?難道是因爲視圖中的用戶實例實際上是一個SimpleLazyObject?

回答

1

該表格中缺少Profile實例。您應該將其作爲instance參數傳遞給它,否則表單會嘗試創建一個新實例(它沒有user_id)。

+0

你是說在else分支中,像這樣? 'form = CompleteRegistration(instance = request.user.get_profile())' - 因爲那也行不通,我遇到了同樣的問題。 – dnmh

+1

在'if request.method =='POST':'和'else:'分支中。 – knbk

+0

我在if分支中添加了這個:'form = CompleteRegistration(request.POST,instance = request.user.get_profile())' - 它不再破壞,它沒問題。但是,簡歷(FieldFile)未保存。這完全是一個不同的問題,還是與此有關?謝謝。 – dnmh