from crispy_forms.helper import FormHelper from crispy_forms.layout import Layout, HTML, Field, Submit, Hidden from django import forms from django.conf import settings from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ from .mixins import RequestNotifiable from .models import ( Request, STATUS_NEW ) # -------------------------------- Client-side forms -----------------------------------# class ContactUsForm(RequestNotifiable, forms.ModelForm): field_template = 'bootstrap/forms/contact_us.html' def __init__(self, *args, **kwargs): self.next = kwargs.pop('next') self.helper = FormHelper() self.helper.form_action = reverse_lazy('contact_us:send') self.helper.form_method = 'post' self.helper.layout = Layout( Hidden('next', reverse_lazy(self.next)), Field('name', css_class="left-menu__text", placeholder=_("Имя"), template=self.field_template), Field('email', css_class="left-menu__text", placeholder=_("Email"), template=self.field_template), Field('subject', css_class="left-menu__text", placeholder=_("Название продукта"), template=self.field_template), Field('phone', css_class="left-menu__text", placeholder=_("+79781234567"), template=self.field_template), Submit('send', _("Отправить"), css_class="left-menu__btn") ) super(ContactUsForm, self).__init__(*args, **kwargs) self.init_fields(self.fields) def init_fields(self, fields): for field_name in fields: if field_name != "phone": fields[field_name].required = True def is_valid(self): return super().is_valid() def save(self, commit=True): self.instance.status = STATUS_NEW return super().save(commit) def send_email(self, request): context = { 'from_email': settings.DEFAULT_FROM_EMAIL, 'recipients': (settings.DEFAULT_FROM_EMAIL,), 'email': { 'name': self.instance.name, 'email': self.instance.email, 'subject': self.instance.subject, 'phone': self.instance.phone or None, }, 'send_at_date': self.instance.create_at, } self.send_request_notification( context, ) class Meta: model = Request fields = ('name', 'email', 'subject', 'phone',)