Есть очень хорошее приложения для отображения форм Django и называется оно django-crispy-forms, именно его и мы и используем в своих сайтах. Удобное, простое и быстрое в освоении, плюс хорошая документация разработчика.
Используя это приложения не значит быть привязанным именно к Bootsptrap4, можно использовать и более раннии версии bootstrap.
В примере только файл css, но вы можете добавить javascript файл, если он нужен вам.
Создаем модель, например, Company.
Models.py
from django.db import models
class Company(models.Model): name = models.CharField(max_length=150) email = models.EmailField(blank=True) job_title = models.CharField(max_length=50, blank=True) bio = models.TextField(blank=True)
Допустим мы хотим страницу добавления модели Company. Для этого в файле views.py пропишем:
Views.py
from django.views.generic import CreateView from .models import Company
class CompanyCreateView(CreateView): model = Company fields = ('name', 'email', 'job_title', 'bio')
Теперь создадим шаблон company_form.html, так как именно его django будет искать по умолчанию, если мы явно не укажем название шаблона в переменной template_name.
В некоторых проектах вам понадобится больше свободы и вы захотите рендить поля вручную, чтобы засунуть их в блоки, например. Для этого используйте тег as_crispy_field.
В django-crispy-forms есть встроенный механизм, который упростит вам разработку, это я вам точно говорю. Покажу пример использования форм, если вам необходимо вывести их с помощью ModelForm.
forms.py
from django import forms from crispy_forms.helper import FormHelper from crispy_forms.layout import Submit from people.models import Company
class CompanyForm(forms.ModelForm): class Meta: model = Company fields = ('name', 'email', 'job_title', 'bio')
Обратите внимание, если не добавить add_input, то кнопки в форме не будет. Это очень кратко и просто я описал возможности django-crispy-forms. Если такие классные вещи, как self.helper.layout, в них можно разделить поля на группы и задать каждой группе заголовок, так же прописать каждому полю свой стиль, свой id и т.д. Вот небольшой пример из моего крайнего проекта: