2009-01-05 66 views
12

我有一个模型问题域名为userid,在提出问题之前,我需要登录,我希望保存时捕获当前登录用户的用户ID并将其分配给用户的用户ID问题模型。我如何自动填充django中的字段?

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

类问题(models.Model): ... 的userid = models.ForeignKey(用户,可编辑= FALSE) ...

我如何分配登录的用户ID的问题模型userid

+0

作为一个旁注,它会更明智和清晰称为您的字段“用户”,而不是“userid”;因为该属性实际上是指用户对象,而不是id号。 Django将自动创建带有'_id'的数据库字段;所以你现在已经是“userid_id”了。 – 2009-01-05 17:13:16

回答

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

谢谢!即将发布类似的问题,但这解决了它 – f4nt 2009-04-03 21:08:09

0

有一点要记住的是事实,你不能从你的模型访问请求对象(因此当前用户)没有黑客左右Django的设计约束。

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

2

This blog入门(由詹姆斯贝内特)可能会证明对你有用......它奠定了一种方法来做几乎完全符合你的要求。

0

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

如果你像我一样,你会被诱惑,只是抢例子并运行,但你可能从放缓中受益,花几分钟时间阅读,然后执行 - 我当然会有...

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