You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

74 lines
2.8 KiB

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, 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.next_kwargs = kwargs.pop('kwargs')
self.field_css = kwargs.pop('field_css_base_class')
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) if not self.next_kwargs else reverse_lazy(self.next,
kwargs=self.next_kwargs)),
Field('name', css_class=self.field_css + "__text", placeholder=_("Имя"), template=self.field_template),
Field('email', css_class=self.field_css + "__text", placeholder=_("Email"), template=self.field_template),
Field('subject', css_class=self.field_css + "__text", placeholder=_("Название продукта"),
template=self.field_template),
Field('phone', css_class=self.field_css + "__text", placeholder=_("+79781234567"),
template=self.field_template),
Submit('send', _("Отправить"), css_class=self.field_css + "__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',)