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

Атрибут fields

Атрибут fields применяется в классе CreateView и определяет набор полей модели, которые будут доступны для заполнения пользователю при создании нового объекта. Значение атрибута передается в качестве аргумента в форму, которая автоматически генерируется на основе модели. Атрибут может принимать список полей, кортеж или специальное значение '__all__' для включения всех полей модели.

Синтаксис

from django.views.generic.edit import CreateView from .models import ModelName class ModelNameCreateView(CreateView): model = ModelName fields = ['field1', 'field2', 'field3']

Пример

Давайте создадим представление для создания статьи с указанием только необходимых полей:

from django.views.generic.edit import CreateView from .models import Article class ArticleCreateView(CreateView): model = Article fields = ['title', 'content', 'category'] template_name = 'article_create.html' success_url = '/articles/'

При обращении к этому представлению будет сгенерирована форма с полями 'title', 'content' и 'category'. Все остальные поля модели (например, 'created_at' или 'author') не будут отображаться в форме.

Пример

Давайте используем специальное значение '__all__' для включения всех полей модели:

from django.views.generic.edit import CreateView from .models import Article class ArticleCreateView(CreateView): model = Article fields = '__all__' template_name = 'article_create.html' success_url = '/articles/'

В этом случае форма будет содержать все поля модели Article. Однако стоит быть осторожным с этим подходом, так как он может раскрыть поля, которые не должны редактироваться пользователем (например, поля с внешними ключами или автоматически вычисляемые).

Пример

Давайте укажем поля в виде кортежа для большей защиты от случайных изменений:

from django.views.generic.edit import CreateView from .models import Article class ArticleCreateView(CreateView): model = Article fields = ('title', 'content', 'category') template_name = 'article_create.html' success_url = '/articles/'

Использование кортежа вместо списка не меняет логику работы, но может быть предпочтительнее с точки зрения неизменяемости данных. Форма все равно будет содержать те же поля: 'title', 'content' и 'category'.

Пример

Давайте рассмотрим полный пример работы с представлением и шаблоном для создания статьи:

# views.py from django.views.generic.edit import CreateView from django.urls import reverse_lazy from .models import Article class ArticleCreateView(CreateView): model = Article fields = ['title', 'content', 'category'] template_name = 'article_create.html' success_url = reverse_lazy('article_list')
# models.py from django.db import models class Category(models.Model): name = models.CharField(max_length=100) class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() category = models.ForeignKey(Category, on_delete=models.CASCADE) created_at = models.DateTimeField(auto_now_add=True)
<form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Create Article</button> </form>

Результат выполнения кода при успешном создании статьи:

"Article created successfully"

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

  • класс CreateView,
    который используется для создания новых объектов
  • атрибут fields,
    который определяет список полей для отображения в форме
  • класс UpdateView,
    который используется для редактирования существующих объектов
  • класс FormView,
    который предоставляет базовую функциональность для работы с формами
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить