2010-02-08 110 views
1

我的問題很相似,這個問題:Django: Populate user ID when saving a modelDjango的:保存用戶ID與型號保存

不幸的是我不明白他們的答案。

當用戶登錄時,我希望他們能夠提交一個鏈接,我有一個user_id外鍵,我似乎無法填充。

def submit(request): 
    if request.method == 'POST': 
     form = AddLink(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('home') 
    else: 
     form = AddLink() 

    return render_to_response('links/submit.html', {'form': form}) 

每次我提出我的形式,它提到:

null value in column "user_id" violates not-null constraint 

我理解,但我不知道如何USER_ID添加到我的窗體對象。我如何訪問當前登錄的用戶ID並將其與我的表單數據一起提交?

回答

11

你可以做這樣的事情:

if form.is_valid(): 
    link = form.save(commit=False) 
    link.user = request.user 
    link.save() 

提交=假,您可以修改生成的對象之前,它實際上是保存到數據庫中。

+0

我看到了......這是做的最好的方法是什麼?像這樣的東西似乎非常普遍,我認爲它們會是「自動的」。 – TheLizardKing 2010-02-08 00:24:16

+0

請記住檢查它是否在您的視圖中登錄的用戶。 @login_required修飾器對此非常好:-) – Klette 2010-02-08 00:25:17

+0

好吧,您可以將user_id插入到表單中的隱藏字段中,但這是正常完成的方式。 – Klette 2010-02-08 00:26:38

6

這個替換您的if form.is_valid() - 阻塞:

if form.is_valid(): 
    form.instance.user = request.user 
    form.save() 
    return redirect('home')