Django:使用模型保存用户ID

Django:使用模型保存用户ID,django,django-models,Django,Django Models,我的问题与这个问题非常相似: 不幸的是,我不太明白他们的答案 当用户登录时,我希望他们能够提交链接,并且我有一个用户id外键,我似乎无法填充 def submit(request): if request.method == 'POST': form = AddLink(request.POST) if form.is_valid(): form.save() return redirect('home')

我的问题与这个问题非常相似:

不幸的是,我不太明白他们的答案

当用户登录时,我希望他们能够提交链接,并且我有一个用户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

我理解,但我不知道如何将用户id添加到我的表单对象。如何访问当前登录的用户id并将其与表单数据一起提交?

您可以执行以下操作:

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

commit=False允许您在将结果对象实际保存到数据库之前对其进行修改。

将您的
if form.is\u valid()
-块替换为以下内容:

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

我看到。。。这是最好的方法吗?像这样的事情似乎很常见,我想他们可能是“自动”的。记得检查它登录的用户是否在你的视图中。
@login\u required
decorator在这方面非常好:-)好吧,你可以将用户id插入表单中的一个隐藏字段,但这是通常的做法。对,你认为Piquard的答案如何?好吧,它起作用:-)由你决定哪种方式最好,两种方式都会起作用,但是commit=False方法是有文档记录的方法,我使用的是您建议的方法,一种有效的方法。我失败的地方是在子模型实例中保存用户id。我使用模型表单和内联表单集来创建相关的模型实例。有什么建议吗?