我有一个允许用户发布文章的表单。文章表与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} )
如果不是因为某些字段应该由代码设置而不是基于请求数据,那么如何在验证请求之前设置一个字段会失败?
答案 0 :(得分:2)
假设您确定用户已登录。
models.py:
Article(models.Model):
text = modesl.TextField()
user = models.ForeignKey(User)
forms.py:
ArticleForm(forms.ModelForm):
class Meta:
model = Article
exclude = ('user',)
views.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')