Site/programmer/forms.py

134 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 .models import CallbackRequest, Profile
User = get_user_model()
class CallbackForm(forms.ModelForm):
captcha = CaptchaField(label='Введите текст с картинки', required=True)
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