РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
313 of 818 menu

Метод get_form

Метод get_form применяется к классу представления FormView и возвращает экземпляр формы, указанной в атрибуте FormView/attribute/form_class/">form_class. Этот метод вызывается автоматически перед обработкой запроса, чтобы подготовить форму для отображения или валидации. Он учитывает метод запроса: для GET возвращается пустая или предзаполненная форма, а для POST - форма с переданными данными. Метод полезен для кастомизации инициализации формы, например, для передачи начальных значений или изменения полей в зависимости от контекста.

Синтаксис

from django.views.generic.edit import FormView class MyFormView(FormView): form_class = MyForm template_name = 'my_template.html' success_url = '/success/' def get_form(self, form_class=None): # кастомизация формы return form_class(**self.get_form_kwargs())

Пример

Создадим простую форму для поиска статей по названию и используем get_form для передачи начального значения:

from django import forms from django.views.generic.edit import FormView from django.shortcuts import render from myapp.models import Article class SearchForm(forms.Form): query = forms.CharField(max_length=100, required=False) class SearchView(FormView): template_name = 'search.html' form_class = SearchForm success_url = '/results/' def get_form(self, form_class=None): if form_class is None: form_class = self.get_form_class() # Передаём начальное значение 'Django' в поле query initial = self.get_initial() initial['query'] = 'Django' self.initial = initial return form_class(**self.get_form_kwargs()) def form_valid(self, form): query = form.cleaned_data['query'] articles = Article.objects.filter(title__icontains=query) # Здесь можно сохранить результаты в сессии или передать через контекст return super().form_valid(form)

Результат: при загрузке страницы поле поиска будет предзаполнено словом "Django".

Пример

Используем get_form для динамического изменения поля формы в зависимости от роли пользователя:

from django import forms from django.views.generic.edit import FormView from myapp.models import Article class ArticleForm(forms.Form): title = forms.CharField(max_length=100) content = forms.CharField(widget=forms.Textarea) class ArticleCreateView(FormView): template_name = 'article_create.html' form_class = ArticleForm success_url = '/articles/' def get_form(self, form_class=None): if form_class is None: form_class = self.get_form_class() form = form_class(**self.get_form_kwargs()) # Если пользователь не является администратором, делаем поле content обязательным if not self.request.user.is_staff: form.fields['content'].required = True return form def form_valid(self, form): # Создание статьи Article.objects.create( title=form.cleaned_data['title'], content=form.cleaned_data['content'] ) return super().form_valid(form)

Результат: для обычных пользователей поле "content" становится обязательным, а для администраторов - нет.

Пример

Переопределим get_form для передачи дополнительных аргументов в форму, например, текущего пользователя:

from django import forms from django.views.generic.edit import FormView from myapp.models import Article class UserForm(forms.Form): title = forms.CharField(max_length=100) def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super().__init__(*args, **kwargs) class UserArticleView(FormView): template_name = 'user_article.html' form_class = UserForm success_url = '/user-articles/' def get_form(self, form_class=None): if form_class is None: form_class = self.get_form_class() kwargs = self.get_form_kwargs() kwargs['user'] = self.request.user return form_class(**kwargs) def form_valid(self, form): # Используем пользователя из формы user = form.user Article.objects.create( title=form.cleaned_data['title'], author=user ) return super().form_valid(form)

Результат: форма получает объект пользователя и использует его при создании статьи.

Смотрите также

  • атрибут form_class,
    который определяет класс формы, используемый представлением
  • метод get_success_url,
    который возвращает URL для перенаправления после успешной отправки формы
  • метод form_valid,
    который вызывается при успешной валидации формы
  • метод form_invalid,
    который обрабатывает невалидную форму
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить