2017-08-02 12 views
1

皆さん! 私はテンプレートのフォームに表示したいDjango:テンプレート内の2つのFormViews

私のフォームは、次のとおりです。

class ContactView(FormView): 

    form_class = ContactForm 
    succes_url = reverse_lazy('webpage:home') 

    def form_valid(self, form): 
     context = super(ContactView, self).form_valid(form) 
     contact_email = form.cleaned_data['contact_email'] 
     subject = form.cleaned_data['subject'] 
     message = 'Name: {}\nPhone:{}\n{}'.format(form.cleaned_data['contact_name'], form.cleaned_data['contact_phone'], form.cleaned_data['message'],) 
     send_mail(subject, 
        message, 
        contact_email, 
        ['[email protected]']) 
     return context 


class CVCreateView(FormView): 

    form_class = CVCreateForm 
    succes_url = reverse_lazy('webpage:home') 

    def form_valid(self): 
     context = super(CVCreateView, self).form_valid(form) 
     form_owner = form.cleaned_data['owner'] 
     form_cv = form.cleaned_data['cv'] 
     form_email = form.cleaned_data['email'] 
     send_mail('Curriculum Vitae', 
        form_cv, 
        form_email, 
        ['[email protected]']) 
     cv = CV(owner=form_owner, email=form_email, cv=form_cv) 
     cv.save() 
     return context 

(注:

class ContactForm(forms.Form): 
    contact_name = forms.CharField(
     required=True) 
    contact_email = forms.EmailField(
     required=True) 
    contact_phone = forms.CharField(
     required=True) 
    subject = forms.CharField(
     required=True) 
    message = forms.CharField(
     required=True, 
     widget=forms.Textarea) 

class CVCreateForm(forms.ModelForm): 
    class Meta: 
     model = CV 
     fields = '__all__' 

そして、私は2つのFormViewsを持っている2番目の形式では 'form_cv' は私は、電子メールを送信するのは問題ではないと思うが、よく分からないと思う。) この2つのFormViewをTemplateViewに表示したい

の感謝:)

+0

あなたのコード内にあなたのメールのように見えるものをビューに残しました。私には妄想がありますが、これは公共の投稿であるので、私は通常これを '' 'myemail @ gmail.com''のようなものに変更したいと思っています:) – tdsymonds

答えて

1

ごTemplateViewであなただけの、次のようにコンテキスト内で二つの形式を渡す必要がありますする必要があります:あなたはのURLを指すようにフォームaction属性を設定したテンプレートで

from django.views.generic import TemplateView 

from .forms import ContactView, CVCreateView 


class MyTemplateView(TemplateView): 
    template_name = 'path/to/my_template.html' 

    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 
     context['contact_form'] = ContactView() 
     context['cv_form'] = CVCreateView() 
     return context 

適切なビュー、ContactViewまたはCVCreateViewので、このような何か:これは

<form action="{% url 'contact_form' %}" method="POST"> 
    {{ contact_form }} 
</form> 

<form action="{% url 'cv_form' %}" method="POST"> 
    {{ cv_form }} 
</form> 

希望に役立ちますか?

+0

私はあなたのようにしましたが、

+0

urls.pyを '' 'url(r '^ $'、MyTemplateView.as_view()、name = 'my_template_view')のように変更します。 '' ' – tdsymonds

+0

これは私のURLです:url(regex = r '^ two_forms $'、view = views.TwoFormsView.as_view()、name = 'forms')、 –

関連する問題