Fields

All fields are in pragmatic.fields.

Form Fields

RangeField

Accepts a single number or a range expressed as start-stop (e.g. 10-50). Returns a (start, stop) tuple.

from pragmatic.fields import RangeField

class SearchForm(forms.Form):
    price = RangeField(required=False)

User input examples: "42", "10-100", "1.5-9.9".

TruncatedModelChoiceField

A ModelChoiceField whose option labels are truncated to truncate_chars characters, with truncate_suffix (default '...') appended when truncation occurs.

from pragmatic.fields import TruncatedModelChoiceField

class OrderForm(forms.Form):
    customer = TruncatedModelChoiceField(
        queryset=Customer.objects.all(),
        truncate_chars=40,
    )

AlwaysValidChoiceField

A ChoiceField that accepts any value without validation. Useful when the choice list is dynamic and populated client-side.

AlwaysValidMultipleChoiceField

Same as AlwaysValidChoiceField but for multiple-select inputs.

MultiSelectFormField

A MultipleChoiceField rendered as CheckboxSelectMultiple.

from pragmatic.fields import MultiSelectFormField

class TagForm(forms.Form):
    tags = MultiSelectFormField(choices=TAG_CHOICES)

SliderField

A range-slider form field backed by SliderWidget. Returns a scalar value or a slice(start, stop) depending on has_range.

from pragmatic.fields import SliderField

class FilterForm(forms.Form):
    price = SliderField(
        min_value=0,
        max_value=1000,
        step=10,
        has_range=True,      # True → range slider, False → single value
        show_value=True,     # display current value next to slider
        appended_text='€',   # unit suffix
        show_inputs=True,    # show text inputs alongside slider
        required=False,
    )

When has_range=False, boundary values (equal to min_value) are coerced to None (treated as “no filter”) unless required=True.

Model Fields

MultiSelectField

A CharField-based model field that stores multiple choices as a comma-separated string. Use MultiSelectFormField as its form representation.

from pragmatic.fields import MultiSelectField

COLOURS = (('R', 'Red'), ('G', 'Green'), ('B', 'Blue'))

class Product(models.Model):
    colours = MultiSelectField(max_length=20, choices=COLOURS, blank=True)

Note

MultiSelectField is a legacy field that predates django.contrib.postgres.fields.ArrayField. For new PostgreSQL projects, prefer ChoiceArrayField below.

ChoiceArrayField

A PostgreSQL ArrayField whose formfield() renders as CheckboxSelectMultiple.

from pragmatic.fields import ChoiceArrayField
from django.db import models

STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'))

class Article(models.Model):
    statuses = ChoiceArrayField(
        models.CharField(max_length=20, choices=STATUS_CHOICES),
        default=list,
        blank=True,
    )

Requires django.contrib.postgres in INSTALLED_APPS and a PostgreSQL database.

ArrayFieldSelectMultiple

A SelectMultiple widget that reads and writes a delimited string rather than a list. Used as the default widget for ChoiceArrayField in some contexts.

from pragmatic.fields import ArrayFieldSelectMultiple

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        widgets = {
            'statuses': ArrayFieldSelectMultiple(delimiter=','),
        }