2013-08-12 4 views
1

Так что мне удалось вывести форму в шаблон. Но у меня небольшая проблема с одной из форм, поскольку стиль интерфейса уже сделан. Я просто хотел бы иметь возможность выводить имена меток и т. Д. Внутри HTML-кода, который уже существует. Я могу получить форму выходного сигнала к шаблону, используя следующие:Рендеринг и настройка формы django в шаблоне

<form method="post"> 
    {% csrf_token %} 
     {{enquiry_form.as_ul}}       
      <button type="submit" class="submit softcolor"> 
       <span>Submit</span> 
      </button> 
</form> 

Однако, у меня есть поле ManytoMany на модели, в которой я хотел бы, чтобы пользователи могли пометить несколько вариантов с флажком. Когда я выхожу выше, я получаю окно выбора, как со списком категорий, которые он проводит.

{% csrf_token %} 
    {% for fields in enquiry_form %} 
     <div class="block-365 center clearfix"> 
      <label>{{fields.label}}</label> 
      <div class="input-line"> 
       <input name=""> 
      </div> 
     </div> 
    {% endfor %} 

Так что я могу сделать что-то вроде выше, что отлично работает. Но почему-то защита CSRF перестает работать. Я также должен иметь возможность получить доступ к элементам в модели Брошюра (поле ManyToMany).

Вот код, который я до сих пор:

forms.py

from django.forms import ModelForm 
from django import forms 

from contact_enquiries import models 

class ContactEnquiryForm(ModelForm): 

    class Meta: 
     model = models.ContactForm 
     fields=('name','email','company', 'subject', 'message') 


class BrochureRequestForm(ModelForm): 

    class Meta: 
     model = models.ContactForm 
     fields = ('name', 'email', 'company', 'address', 'brochure',) 

views.py

from contact_enquiries import forms 
from django.shortcuts import render 
from django.http import HttpResponseRedirect 


def contact(request): 
    if request.method == 'POST': 
     form = forms.ContactEnquiryForm(request.POST) 
     en_form = forms.BrochureRequestForm(request.POST) 

     print(request.POST) 
     if form.is_valid(): 
      #print "Form looks good!" 
      #e = models.ContactEnquiry(form.cleaned_data) 
      #e.save() 
      form.save() 
      return HttpResponseRedirect('/thanks/') 
     else: 
      form = forms.ContactEnquiryForm() 
      en_form = forms.BrochureRequestForm() 

    return render(request, 'contact.html', { 
      'contact_form' : form, 
      'enquiry_form' : en_form, 
      }) 

models.py

class ContactForm(models.Model): 
    name = models.CharField(max_length="300") 

    company = models.CharField(max_length="200") 

    email = models.CharField(max_length="300") 

    subject = models.TextField() 

    message = models.TextField() 

    address = models.TextField() 

    brochure = models.ManyToManyField("Brochure", blank=True) 

    def __unicode__(self): 
     self.name 

    class Meta: 
     verbose_name = "Contact Enquiry" 
     verbose_name_plural = "Contact Enquiries" 


class Brochure(models.Model):   
    title = models.CharField(max_length="200") 

    def __unicode__(self): 
     self.title 

    class Meta: 
     verbose_name = "Brochure" 
     verbose_name_plural = "Brochures" 

И HTML является выше. Не уверен, какой лучший подход при выводе формы в шаблон, но мне нужно иметь возможность использовать HTML/CSS, чтобы сохранить время повторного его использования. Также мне нужно иметь возможность установить флажок в форме Брошюры. Поскольку идея заключается в том, когда они заполняют форму, они могут выбрать PDF, который они хотели бы отправить.

Любые вопросы, пожалуйста, задавайте вопросы!

ответ

1

Ok так получается, что я мог бы просто вынести шаблон так:

     {% csrf_token %} 
         {% for fields in enquiry_form %} 
         <div class="block-365 center clearfix"> 
          <label>{{fields.label}}</label> 
          <div class="input-line"> 
           <input name=""> 
          </div> 
         </div> 
         {% endfor %} 

Тогда в моем классе, где я поставил поля для вывода в шаблон я могу установить виджет поля следующим образом:

fields = ('name', 'email', 'company', 'address', 'brochure',) 

widgets = {'brochure': forms.CheckboxSelectMultiple()} 

Это будет оказывать ManyToManyField в флажков.

Смежные вопросы