Skip to main content

Creating a Form Class

A form class defines the fields users fill in when adding or editing a record. It maps to your model and is used by BaseCrudView for both the Add form and Edit row actions.

Imports

from ...packages.crud.forms import BaseForm
from ...packages.crud.form_fields import ModelField

from .models import Patient

:::info Relative Import Depth

Module locationDots needed
backend/patients/forms.pyfrom ...packages (3 dots)
backend/masters/geography/forms.pyfrom ....packages (4 dots)
:::

Basic Form Class

class PatientForm(BaseForm):

name = ModelField(
placeholder="Enter Name",
required=True,
required_msg="Name is required.",
)

contact_person = ModelField(
placeholder="Enter Contact Person",
required=True,
required_msg="Contact person is required.",
)

address = ModelField(
placeholder="Enter Address",
required=False,
)

class Meta:
model = Patient

Meta.model links the form to your model. ModelField automatically maps to the correct field type based on the model definition.

Custom Fields

Use CustomSchemaField when you need full control over a field's schema — for rich text areas, custom widgets, or fields not on the model:

from ...packages.crud.form_fields import ModelField, CustomSchemaField

class PatientForm(BaseForm):

bio = CustomSchemaField(
required=False,
schema={"type": "string", "title": "Bio"},
ui_schema={"ui:widget": "TextareaFieldWidget"},
)

class Meta:
model = Patient

Django Form Fields

You can also mix in standard Django form fields:

import django.forms as forms

class PatientForm(BaseForm):
notes = forms.CharField(label="Notes", required=False)

class Meta:
model = Patient