2010-02-08 16 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')