我有一个名为 userid 字段的模型问题,在提出问题之前,需要登录,我想在保存时捕获当前登录用户的用户ID并分配它是问题模型的用户ID。
请注意我没有在我的表单上显示用户ID,即在问题模型中我已声明用户ID如下;
类问题(models.Model): ... userid = models.ForeignKey(User,editable = false) ...
如何将登录用户ID分配给问题模型用户ID ?
答案 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!)