2011-05-01 86 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