2017-01-09 73 views
0

我有一些問題。我想以django的形式提出請求,但它可能有一些問題。這是我的代碼。 forms.py如何Django形式請求

class PostForm(forms.ModelForm): 
    CHOICES = request.user.fields() 
    receive_user = fields.MultipleChoiceField(choices=CHOICES) 
    content = forms.CharField(widget=PagedownWidget(show_preview=False)) 
    publish = forms.DateField(widget=forms.SelectDateWidget) 
    class Meta: 
     model = Post 
     fields = [ 
     "receive_user", 
     "content", 
     ] 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(MyForm, self).__init__(*args, **kwargs) 

和views.py

def post_create(request): 
    if not request.user.is_authenticated(): 
     raise Http404 

    form = PostForm(request.POST or None, request=request) 
    if form.is_valid(): 
     instance = form.save(commit=False) 
     instance.user = request.user 
     instance.save() 

和錯誤消息是

NameError:名稱 '請求' 未定義

+1

請編輯您的問題發佈完整的追溯。 –

回答

0

request被傳遞給__init__方法因此僅在那裏可用。你不能在模塊級別使用它,因爲它沒有在那裏定義;無論如何,你不希望這樣做,因爲在第一次導入類時,模塊級別的任何內容都會運行一次,而不是在實例化表單時運行。

但因爲你做的init內擁有它,你應該有使用它:

class PostForm(forms.ModelForm): 
    receive_user = fields.MultipleChoiceField(choices=()) 

    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['receive_user'].choices = request.user..... 

(請注意,我懷疑.fields()是你想要有什麼,不過沒關係)

+0

謝謝!! self.fields ['receive_user']。choices = self.request.user ....正在工作!! :) –