forms.py 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from django import forms
  2. from django.contrib.auth import password_validation
  3. from django.core.exceptions import ValidationError
  4. from django.forms import inlineformset_factory
  5. from captcha.fields import CaptchaField
  6. from .models import AdvUser, SuperRubric, SubRubric, Ad, AdditionalImage, Comment
  7. from .apps import user_registered
  8. class ChangeUserInfoForm(forms.ModelForm):
  9. # Полное объявление поля email, т.к. хотим сделать поле email обязательным для заполнения1
  10. email = forms.EmailField(required=True, label='Адрес электронной почты')
  11. class Meta:
  12. model = AdvUser
  13. fields = ('username', 'email', 'first_name', 'last_name', 'send_messages')
  14. class RegisterUserForm(forms.ModelForm):
  15. email = forms.EmailField(required=True, label='Адрес электронной почты')
  16. password1 = forms.CharField(required=True, label='Пароль', widget=forms.PasswordInput, help_text=password_validation.password_validators_help_text_html())
  17. password2 = forms.CharField(required=True, label='Пароль (повторно)', widget=forms.PasswordInput, help_text='Введите тот же самый пароль еще раз для проверки')
  18. def clean_password1(self):
  19. password1 = self.cleaned_data['password1']
  20. if password1:
  21. password_validation.validate_password(password1)
  22. return password1
  23. def clean(self):
  24. super().clean()
  25. password1 = self.cleaned_data.get('password1')
  26. password2 = self.cleaned_data.get('password2')
  27. if password1 and password2 and password1 != password2:
  28. errors = {'password2': ValidationError('Введенные пароли не совпадают', code='password_mismatch')}
  29. raise ValidationError(errors)
  30. def save(self, commit=True):
  31. user = super().save(commit=False)
  32. user.set_password(self.cleaned_data['password1'])
  33. user.is_active = False
  34. user.is_activated = False
  35. if commit:
  36. user.save()
  37. user_registered.send(RegisterUserForm, instance=user)
  38. return user
  39. class Meta:
  40. model = AdvUser
  41. fields = ('username', 'email', 'password1', 'password2', 'first_name', 'last_name', 'send_messages')
  42. class SubRubricForm(forms.ModelForm):
  43. # Для Подрубрик поле super_rubric обязательно для заполнения:
  44. super_rubric = forms.ModelChoiceField(required=True, queryset=SuperRubric.objects.all(), empty_label=None, label='Главная рубрика')
  45. class Meta:
  46. model = SubRubric
  47. fields = '__all__'
  48. # Форма поиска для главной страницы
  49. class SearchForm(forms.Form):
  50. keyword = forms.CharField(required=False, max_length=40, label='')
  51. class AdForm(forms.ModelForm):
  52. class Meta:
  53. model = Ad
  54. fields = '__all__'
  55. widgets = {'author': forms.HiddenInput}
  56. AIFormSet = inlineformset_factory(Ad, AdditionalImage, fields='__all__')
  57. # Форма комментариев для зарегистрированного пользователя
  58. class UserCommentForm(forms.ModelForm):
  59. class Meta:
  60. model = Comment
  61. exclude = ('is_active', )
  62. widgets = {'ad': forms.HiddenInput}
  63. # Форма комментариев для гостей сайта
  64. class GuestCommentForm(forms.ModelForm):
  65. captcha = CaptchaField(label='Введите текст с картинки', error_messages={'invalid': 'Неправильный текст'})
  66. class Meta:
  67. model = Comment
  68. exclude = ('is_active', )
  69. widgets = {'ad': forms.HiddenInput}