from django.shortcuts import render from django.http import HttpResponse, HttpResponseRedirect from django.views.generic import TemplateView from django.views.generic.edit import CreateView from django.conf import settings # Create your views here. class OrdipourtousView(TemplateView): template_name = 'ordi-pour-tous-home.html' from .models import GivenItems, NeededItems class ItemsViewBase(CreateView): success_url = "/success" def form_valid(self, form): self.object = form.save() # print("success", dir(self.object), dir(form)) from django.core.mail import send_mail body = "" for f in self.fields: body += f + ':' + str(getattr(self.object, f)) + "\n" send_mail( '[ordipourtous] - ' + self.email_pre_subject + ' - ' + " ".join(str(self.object.name)[:30].split()), body, 'ordipourtous@accrosys.com', settings.EMAIL_TO, fail_silently=False, ) return HttpResponseRedirect(self.get_success_url()) def get_form(self, form_class=None): if form_class is None: form_class = self.get_form_class() form = super(ItemsViewBase, self).get_form(form_class) from crispy_forms.helper import FormHelper form.helper = FormHelper() # Moving field labels into placeholders from crispy_forms.layout import Layout, Field, Submit, ButtonHolder form.helper.layout = Layout() for field_name, field in form.fields.items(): # print("get_form", field_name, field.label, dir(field), field.widget.__class__.__name__) if field.widget.__class__.__name__.lower() not in ('checkboxinput', ): form.helper.layout.append(Field(field_name, placeholder=field.label)) form.fields[field_name].label = False else: form.helper.layout.append(Field(field_name)) # form.helper.form_show_labels = False form.helper.layout.append( ButtonHolder( Submit('submit', 'Envoyer', css_class='btn btn-dark'), css_class='text-center'), ) return form class GivenItemsView(ItemsViewBase): model = GivenItems template_name = 'ordi-pour-tous-givenitems.html' fields = [ 'city', 'computer_ok', 'computer_nok', 'printer_ok', 'screen_ok', 'other', 'name', 'email', 'phone', 'comments' ] email_pre_subject = 'matériel disponible' class NeededItemsView(ItemsViewBase): model = NeededItems template_name = 'ordi-pour-tous-neededitems.html' fields = [ 'city', 'computer_ok', 'printer_ok', 'screen_ok', 'something_is_broken', 'other', 'name', 'email', 'phone', 'comments' ] email_pre_subject = 'besoin de quelque chose'