Перейти к содержанию

Формы

Перед тем как писать представления, нам нужно создать некоторые формы. Для этого создадим файл forms.py в нашем приложении.

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class RegistrationForm(UserCreationForm):
    class Meta:
        model = User
        fields = ("last_name", "first_name", "username", "email", "password1", "password2")

    last_name = forms.CharField(label="Фамилия", required=True)
    first_name = forms.CharField(label="Имя", required=True)
    email = forms.EmailField(required=True)

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.last_name = self.cleaned_data["last_name"]
        user.first_name = self.cleaned_data["first_name"]
        user.email = self.cleaned_data["email"]
        if commit:
            user.save()
        return user

В Django уже существует встроенная форма для регистрации новых пользователей - UserCreationForm. Но она состоит только из 3 полей: никнейм, пароль и подтверждение пароля.
Создадим новый класс, наследуя эту форму.

В мета-классе напишем, что форма будет основана на модели auth.models.User и перечислим необходимые нам поля: фамилия, имя, никнейм, почта, пароль и подтверждение пароля.

Напишем, какие виджеты хотим использовать для наших новый полей и пометим их обязательными.

Переопределим метод save. В начале вызовем метод save из наследуемого класса, но пометим его как commit=False, чтобы не отправлять запрос в БД. Получим из словаря cleaned_data (данные, прошедшие валидации) значения наших новых полей и присвоим их атрибутам нашего нового объекта. Сохраним объект и вернём его.

from django import forms

from .models import Feedback


class FeedbackForm(forms.ModelForm):
    class Meta:
        model = Feedback
        fields = ['text', 'rating']

Самая базовая форма, основанная на модели. Нам требуются только 2 поля: текст отзыва и рейтинг.