2017-03-20 9 views
0

現在ログインしているユーザーをforms.pyにするにはどうすればよいですか?現在のユーザーの電子メールフィールドにあらかじめ入力しようとしています。NameError:名前 'request'がDjangoフォームで定義されていません

class ContactMe(forms.Form): 
    name     = forms.CharField(label = "Name") 
    email_address  = forms.CharField(label = "Email Address", intital = request.user.email) 
    subject    = forms.CharField(label = "Subject") 
    message    = forms.CharField(label = "Message", widget=forms.Textarea(attrs={'cols': 10, 'rows': 3})) 
    additional_comments = forms.CharField(required = False) 
    class Meta: 
     model = Contact_me 

私はviews.pyから要求通過しようとした:それはエラーNameError: name 'request' is not definedをスロー

class ContactMe(forms.Form, request): 
    name     = forms.CharField(label = "Name") 
    email_address  = forms.CharField(label = "Email Address", intital = **request.user.email**) 
    subject    = forms.CharField(label = "Subject") 
    message    = forms.CharField(label = "Message", widget=forms.Textarea(attrs={'cols': 10, 'rows': 3})) 
    additional_comments = forms.CharField(required = False) 
    class Meta: 
     model = Contact_me 

:として

contact_form = ContactMe(request.POST or None, request) 

、次いでクラスContactMeの内部要求を受信します。リクエストは、htmlmodels.pyviews.pyにアクセス可能です。 forms.pyで入手するには?

views.py

def list_posts(request): 
    request.session.set_expiry(request.session.get_expiry_age())  # Renew session expire time 
    instance_list = Post.objects.all() 
    register_form = UserRegisterForm(data=request.POST or None) 
    if register_form.is_valid(): 
     personal.views.register_form_validation(request, register_form) 

    login_form = UserLoginForm(request.POST or None) 
    if login_form.is_valid() : 
     personal.views.login_form_validation(request, login_form) 

    feedback_form = FeedbackForm(request.POST or None) 
    if feedback_form.is_valid() : 
     personal.views.feedback_form_validation(request, feedback_form) 

    contact_form = ContactMe(request.POST or None, request) 
    if contact_form.is_valid() : 
    personal.views.contact_form_validation(request, login_form) 

    if request.POST and not(register_form.is_valid() or login_form.is_valid()): 
     if request.POST.get("login"): 
      return accounts.views.login_view(request) 
     else: 
      return accounts.views.register_view(request) 

    template = 'blog/archives.html' 
    dictionary = { 

     "object_list" : content, 
     "register_form" : register_form, 
     "login_form" : login_form, 
     "feedback_form" : feedback_form, 
     "contact_form" : contact_form, 
    } 
    return render(request,template,dictionary) 
+0

は、あなたの見解を示すことができましたか? –

+0

@KarolisRyselis:質問に 'views.py'が追加されました。 –

+0

このコードはどこにありますか? 'contact_form = ContactMe(request.POSTまたはNone、request)'? –

答えて

1

あなたが構築する際にrequestを渡そうとしていますフォームクラス。この時点では要求はありません。要求はビュー機能内にのみ存在します。したがって、フォームインスタンスを構築するときは、ビュー機能でリクエストを渡す必要があります。フォームを事前入力するには、フォームコンストラクタのキーワードinitialを使用します。フィールド名と値の辞書を入力として受け取ります。

例:

#views.py 
from django.shortcuts import render 
from django import forms 

class TestForm(forms.Form): 
    foo = forms.CharField() 

def test_form(request): 
    form = TestForm(initial=dict(foo=request.<some_property>)) 
    context = dict(form=form) 
    template_name = 'testapp/test.html' 
    return render(request, template_name, context) 
+0

これはうまくいきました。ありがとう! –

2

この行はclass ContactMe(forms.Form, request)間違っています。

(ヒント:requestはフォームの基本クラスではない)

正しい方法は、フォームの__init__方法でuserにアクセスすることである:で

class ContactMe(forms.ModelForm): 

    class Meta: 
     model = Contact_me 
     fields = '__all__' 

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

対応するラインviews.py

contact_form = ContactMe(request.POST, user=request.user) 
+0

私は上記のコードを追加して、 ''(ContactMe、self).__ init __(* args、** kwargs) '' NameError:name 'ContactMe'が定義されていません。クラスは同じ名前の 'ContactMe'です –

+0

インデントは正しいですか?例を単純化するために 'ModelForm'を使うように変更しました。 – arie

+0

はい、インデントが正しくありませんでした。エラーはなくなりました。私は現在ログインしていますが、 'kwargs'と' args'は空の '{}'を表示します。 –

関連する問題