2011-05-01 83 views
3

我有一个允许用户发表文章的表单。文章表与用户表链接在一起,所以我需要根据谁写作来设置user_id字段。通常,django表单会显示一个下拉菜单让我选择作者,但用户不是这种情况。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}) 

我如何验证没有因为某些字段被认为是通过代码进行设置,而不是基于请求数据将在失败的情况下请求之前设置字段?

回答

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) 

在s之前设置数据的另一种方法aving is use:

if form.is_valid(): 
    art = form.save(commit=False) 
    art.user = request.user 
    art.save() 
    return HttpResponse('Success') 
+1

来自PHP我觉得最后一个方法最吸引我。不知道为什么。我会接受你的回答,谢谢。 – Ian 2011-05-01 04:45:22