136 lines
5.2 KiB
Python
136 lines
5.2 KiB
Python
# from captcha.fields import CaptchaField
|
||
from django import forms
|
||
from django.contrib.auth import get_user_model
|
||
from django.contrib.auth.forms import UserCreationForm
|
||
from turnstile.fields import TurnstileField
|
||
|
||
from .models import CallbackRequest, Profile
|
||
|
||
|
||
User = get_user_model()
|
||
|
||
class CallbackForm(forms.ModelForm):
|
||
# captcha = CaptchaField(label='Введите текст с картинки', required=True)
|
||
captcha = TurnstileField(label='', theme='light', size='normal')
|
||
|
||
class Meta:
|
||
model = CallbackRequest
|
||
fields = ['name', 'phone', 'email', 'question']
|
||
widgets = {
|
||
'name': forms.TextInput(attrs={
|
||
'class': 'form-input',
|
||
'placeholder': 'Ваше имя'
|
||
}),
|
||
'phone': forms.TextInput(attrs={
|
||
'class': 'form-input',
|
||
'placeholder': '+7 (___) ___-__-__'
|
||
}),
|
||
'email': forms.EmailInput(attrs={
|
||
'class': 'form-input',
|
||
'placeholder': 'your@email.com'
|
||
}),
|
||
'question': forms.Textarea(attrs={
|
||
'class': 'form-textarea',
|
||
'placeholder': 'Опишите ваш вопрос или задачу...',
|
||
'rows': 4
|
||
}),
|
||
}
|
||
labels = {
|
||
'name': 'Имя',
|
||
'phone': 'Телефон',
|
||
'email': 'Электронная почта',
|
||
'question': 'Ваш вопрос'
|
||
}
|
||
|
||
def __init__(self, *args, **kwargs):
|
||
# Извлекаем request из kwargs, если он передан
|
||
self.request = kwargs.pop('request', None)
|
||
super().__init__(*args, **kwargs)
|
||
|
||
# Если пользователь авторизован — удаляем поле капчи
|
||
if self.request and self.request.user.is_authenticated:
|
||
del self.fields['captcha']
|
||
|
||
|
||
class UserEditForm(forms.ModelForm):
|
||
class Meta:
|
||
model = User
|
||
fields = ['first_name', 'last_name', 'email']
|
||
widgets = {
|
||
'first_name': forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Имя'}),
|
||
'last_name': forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Фамилия'}),
|
||
'email': forms.EmailInput(attrs={'class': 'form-input', 'placeholder': 'Email'}),
|
||
}
|
||
|
||
|
||
class ProfileForm(forms.ModelForm):
|
||
class Meta:
|
||
model = Profile
|
||
fields = ['phone', 'company', 'specialization', 'avatar', 'email_notifications']
|
||
widgets = {
|
||
'phone': forms.TextInput(attrs={'class': 'form-input', 'placeholder': '+7 (___) ___-__-__'}),
|
||
'email_notifications': forms.CheckboxInput(attrs={'class': 'form-checkbox'}),
|
||
'company': forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Название компании'}),
|
||
'specialization': forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Специализация'}),
|
||
'avatar': forms.FileInput(attrs={'class': 'form-file'}),
|
||
'email_notifications': forms.CheckboxInput(attrs={'class': 'form-checkbox'}),
|
||
}
|
||
|
||
|
||
class RegistrationForm(UserCreationForm):
|
||
# Поля пользователя
|
||
first_name = forms.CharField(
|
||
max_length=30,
|
||
required=True,
|
||
label='Имя',
|
||
widget=forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Имя'})
|
||
)
|
||
last_name = forms.CharField(
|
||
max_length=30,
|
||
required=False,
|
||
label='Фамилия',
|
||
widget=forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Фамилия'})
|
||
)
|
||
email = forms.EmailField(
|
||
required=True,
|
||
widget=forms.EmailInput(attrs={'class': 'form-input', 'placeholder': 'Email'})
|
||
)
|
||
|
||
# Поля профиля
|
||
phone = forms.CharField(
|
||
max_length=20,
|
||
required=False,
|
||
label='Телефон',
|
||
widget=forms.TextInput(attrs={'class': 'form-input', 'placeholder': '+7 (___) ___-__-__'})
|
||
)
|
||
company = forms.CharField(
|
||
max_length=255,
|
||
required=False,
|
||
label='Компания',
|
||
widget=forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Компания'})
|
||
)
|
||
specialization = forms.CharField(
|
||
max_length=100,
|
||
required=False,
|
||
label='Специализация',
|
||
widget=forms.TextInput(attrs={'class': 'form-input', 'placeholder': 'Специализация'})
|
||
)
|
||
|
||
class Meta:
|
||
model = User
|
||
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
|
||
|
||
def save(self, commit=True):
|
||
user = super().save(commit=False)
|
||
user.first_name = self.cleaned_data['first_name']
|
||
user.last_name = self.cleaned_data['last_name']
|
||
user.email = self.cleaned_data['email']
|
||
if commit:
|
||
user.save()
|
||
# Создаём или обновляем профиль
|
||
profile, created = Profile.objects.get_or_create(user=user)
|
||
profile.phone = self.cleaned_data['phone']
|
||
profile.company = self.cleaned_data['company']
|
||
profile.specialization = self.cleaned_data['specialization']
|
||
profile.save()
|
||
return user |