2017-08-02 67 views
1

大家好! 我想在一個模板來顯示對窗體Django:模板中的兩個FormView

我的形式是:

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__' 

而且我有兩個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 

(注:在第二種形式的 'form_cv' 是會是一個PDF文件我認爲這不是一個問題發送電子郵件,但我不知道很好。) 我想在TemplateView中顯示這兩個FormView

謝謝:)

+0

爲了讓您知道,您在視圖中的代碼中留下了類似於您的電子郵件的內容。打電話給我偏執狂,但因爲這是一個公共職位,我通常更喜歡把它改變爲更像''myemail @ gmail.com'''的東西:) – tdsymonds

回答

1

在你TemplateView你需要只需要通過兩種形式中的背景如下:

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 

在模板中設置形式action屬性指向的網址相應的視圖,ContactViewCVCreateView,所以是這樣的:

<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(regex = r'^ two_forms $',view = views.TwoFormsView.as_view(),name ='forms'), –