我如何自动填充django中的字段?

时间:2009-01-05 13:24:42

标签: django forms integration-testing

我有一个名为 userid 字段的模型问题,在提出问题之前,需要登录,我想在保存时捕获当前登录用户的用户ID并分配它是问题模型的用户ID。

请注意我没有在我的表单上显示用户ID,即在问题模型中我已声明用户ID如下;

类问题(models.Model):     ...    userid = models.ForeignKey(User,editable = false)    ...

如何将登录用户ID分配给问题模型用户ID

4 个答案:

答案 0 :(得分:11)

您的代码可能如下所示:

from django.contrib.auth.decorators import login_required

class QuestionForm(forms.ModelForm):
    class Meta:
         model = Question

@login_required
def ask(request):
    form = QuestionForm(request.POST)

    if form.is_valid():
        question = form.save(False)
        question.userid = request.user
        question.save()

    #...

答案 1 :(得分:2)

This blog条目(James Bennett)也可能对你有用......它提供了一种几乎完全符合你需要的方法。

答案 2 :(得分:0)

要记住的一件事是,您不能从模型中访问请求对象(以及当前用户),而不会破坏django的设计约束。

因此,自动填充像created_by和updated_by这样的字段的巧妙技巧不适用于Django。您必须在视图中手动设置此类字段,如@Daevaorn所示。

答案 3 :(得分:0)

对于更新的 - 可能是更新的 - 资源,我推荐官方的Django文档。这个例子已经进入了管理文档的ModelAdmin方法部分: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods

如果你像我一样,你会想要抓住那个例子然后跑步,但你可能会受益于减速,花几分钟阅读,然后实施 - 我当然会...... / p>

请注意,我指的是1.6,但在页面的右下角是一个动态选择器,让你选择你的版本。 (这些令人敬畏的文档正在将我从Rails推送到Django!)

相关问题