Hi.
As a recent feincms convert (from django-page-cms) I'd like to share a
custom form I made to receive enquiries from potential customers.
Upon submit a confirmation email is sent to both the site owner and
the customer.
I'd like to note that instead of putting my content types into
models.py I decided it would be cleaner to have a cms.py file for that
stuff. I then make sure to import cms.py from the models.py file.
The Enquiry model could be any standard django model class you create,
and EnquiryForm is just a normal ModelForm connected to the Enquiry
model.
Caveats: It should be possible to return a HttpResponseRedirect
because that is standard behavior when submitting forms. Perhaps you
could allow for that Matthias? Just check if what is returned from
render is of instance of HttpResponseRedirect and then you pass on the
redirection.
# enquiry/models.py
# -*- coding: utf-8 -*-
from django.db import models
from django.utils.translation import ugettext_lazy as _
class HandymanType(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return
self.name
class Meta:
verbose_name = _(u'Handyman type')
verbose_name_plural = _(u'Handyman types')
# class Handyman(models.Model):
# name = models.CharField(max_length=120)
class Enquiry(models.Model):
name = models.CharField(max_length=100,
verbose_name=_(u"Name"), help_text=_(u"Your or your company's name"))
address = models.CharField(max_length=200,
verbose_name=_(u"Address"), help_text=_(u"Please write street name and
number"))
postal_code = models.CharField(max_length=10,
verbose_name=_(u"Postal code"))
town = models.CharField(max_length=50,
verbose_name=_(u"Town/City"))
phone = models.CharField(max_length=32,
verbose_name=_(u"Telephone"), null=True, blank=True)
email = models.EmailField(verbose_name=_(u"Email Address"),
null=True, blank=True)
handy_type = models.ManyToManyField(HandymanType,
verbose_name=_(u"What kind of handyman do you need?"), null=True,
blank=True)
details = models.TextField(verbose_name=_(u"Details about
assignment"), null=True, blank=True)
def __unicode__(self):
return
self.name
def get_handy_types(self):
retval = u""
try:
retval = u", ".join(x.__unicode__() for x in
self.handy_type.all())
except:
pass
return retval
class Meta:
verbose_name = _(u'Enquiry')
verbose_name_plural = _(u'Enquiries')
# enquiry/forms.py
# -*- coding: utf-8 -*-
from django.forms import ModelForm
from handverkere.enquiry.models import Enquiry
class EnquiryForm(ModelForm):
class Meta:
model = Enquiry
# enquiry/admin.py
from django.contrib import admin
from handverkere.enquiry.models import *
admin.site.register(Enquiry)
admin.site.register(HandymanType)
# enquiry/cms.py
# -*- coding: utf-8 -*-
from django.template import RequestContext
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from django.core.mail import EmailMessage
from django.db import models
from mysite.enquiry.models import Enquiry
from mysite.enquiry.forms import EnquiryForm
class EnquiryContent(models.Model):
form = EnquiryForm
@classmethod
def initialize_type(cls, form=None):
if form:
cls.form = form
def render(self, **kwargs):
request = kwargs.get('request')
if request.method == 'POST':
form = self.form(request.POST)
if form.is_valid():
enquiry = form.save()
try:
confirmation = render_to_string('emails/
enquiry_confirmation_email.txt', { 'enquiry': enquiry } )
subject = _(u"%s - My sites name enquiry
received") %
enquiry.name
email = EmailMessage(subject, confirmation,
bcc=['
in...@mysite.net'], to=[enquiry.email])
email.send()
except Exception, inst:
pass # You should probably log the error
# return HttpResponseRedirect('/thankyou/') # Redirect
after POST
return render_to_string('content/enquiryform/
thanks.html')
else:
form = EnquiryForm()
return render_to_string('content/enquiryform/form.html', {
'content': self,
'form': form,
}, context_instance=RequestContext(request))
class Meta:
abstract = True
verbose_name = _(u'Enquiry form')
verbose_name_plural = _(u'Enquiry forms')
from feincms.module.page.models import Page
Page.create_content_type(EnquiryContent)
I hope this helps someone.
regards,
hejsan
On Sep 7, 7:38 am, Matthias Kestenholz <
matthias.kestenh...@gmail.com>
wrote: