2014-02-26 28 views
1

我對Django相當新,在這裏我需要幫助獲取這個「表單」來獲取當前登錄用戶的用戶ID。我可以將此Django表單設爲作者嗎?

這裏是我的forms.py:

from django import forms 
from models import Entry 


class EntryForm(forms.ModelForm): 

    class Meta: 
     model = Entry 
     fields = ('title', 'body', 'thumbnail') 

我找不到對這種形式實現的任何文件,具體怎麼了「田」變量作品。

我可以通過添加筆者喜歡這個有些得到這個工作:

fields = ('title', 'body', 'thumbnail', 'author') 

這幾乎是所有我需要的,除了這隻會增加每個註冊用戶的下拉列表。

我該如何在Django中做這樣的事情?

from django import forms 
from models import Entry 
from django.contrib.auth.models import User 

class EntryForm(forms.ModelForm): 

    class Meta: 
     model = Entry 
     fields = ('title', 'body', 'thumbnail') 
      fields.author = request.user.username # <-- SEEMS TO NOT DO ANYTHING 

或者取而代之,我怎麼能將這個代碼編入views.py?

def create(request): 
    if request.POST: 
     form = EntryForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.author = request.user.id # <-- SEEMS TO NOT DO ANYTHING 
      form.save() 

      return HttpResponseRedirect('/weblog') 

    else: 
     form = EntryForm() 

    args = {} 
    args.update(csrf(request)) 

    args['form'] = form 

    return render_to_response('coltrane/newpost.html', args) 

回答

2

您需要在實例上設置作者,而實例是form.save()的結果,而不是在表單上。

if form.is_valid(): 
    obj = form.save(commit=False) 
    obj.author = request.user 
    obj.save() 

請注意,您的第一次嘗試將給予一個NameError異常(因爲request不在該範圍定義)。

+0

優秀,完美的工作!底部的3行代碼將非常有用,因爲它對於任何其他類型的表單都是非常有用的。謝謝! – user1504605

-1

您可以簡單地使用request.user您的視圖中,而不是request.user.username或request.user.id

 form.author = request.user 
相關問題