3

我有一个允许用户发表文章的表格。article 表与 users 表链接在一起,所以我需要根据谁在写来设置 user_id 字段。通常,django 表单会显示一个下拉列表以允许我选择作者,但对于用户而言并非如此。

I have the following code:

if request.method == 'POST':
    ArticleForm = ArticleForm( request.POST )
    if ArticleForm.is_valid():
        article = ArticleForm.save ()
        return render( request, 'success.html' )
else:
    ArticleForm = ArticleForm()

return render( request, 'post.html', {'ArticleForm': ArticleForm} )

如何在验证请求之前设置一个字段,以防万一因为某些字段应该由代码设置而不是基于请求数据而失败?

4

1 回答 1

2

假设您要确保用户已登录。

模型.py:

Article(models.Model):
    text = modesl.TextField()
    user = models.ForeignKey(User)

表格.py:

ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        exclude = ('user',)

视图.py:

article = Article(user=request.user)   

if request.method == 'POST':
    form = ArticleForm(request.POST, instance=article)
    if form.is_valid():
        form.save()
        return HttpResponse('success')
else:
    form = ArticleForm(instance=article)

在保存之前设置数据的另一种方法是使用:

if form.is_valid():
    art = form.save(commit=False)
    art.user = request.user
    art.save()
    return HttpResponse('Success')
于 2011-05-01T04:25:19.860 回答