2017-01-09 4 views
0

私はいくつか問題があります。私はジャンゴのフォームでリクエストを受けたいが、それはいくつかの問題を抱えている可能性があります。ここに私のコードです。 forms.pydjangoフォームへの要望は

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__メソッドに渡され定義されていませんしたがって、そこにのみ利用可能です。そこに定義されていないため、モジュールレベルでは使用できません。フォームがインスタンス化されたときではなく、クラスが最初にインポートされたときにモジュールレベルのものが一度実行されるため、あなたはしたくないでしょう。

しかし、あなたが初期化の中でそれを持っていることから、あなたはそこにそれを使用する必要があります。

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 ....は動作しています!! :) –

関連する問題