5.2. Models Field String

  • models.CharField - stores a string of characters with maximum length (max: 255 characters)

  • models.TextField - stores a string of characters without maximum length

  • models.SlugField - stores a normalized string of characters (lowercase, no spaces, no special characters, etc.)

  • models.EmailField - stores an email address with validation

  • models.URLField - stores an URL address with validation

>>> 
... from django.db import models
... from django.utils.translation import gettext_lazy as _
... from django.utils.text import slugify
...
...
... class Customer(models.Model):
...     firstname = models.CharField(verbose_name=_('First Name'), max_length=50)
...     lastname = models.CharField(verbose_name=_('Last Name'), max_length=50, db_index=True)
...     username = models.SlugField(verbose_name=_('Username'), max_length=50, unique=True)
...     email = models.EmailField(verbose_name=_('Email'), max_length=100, blank=True, null=True, default=None)
...     website = models.URLField(verbose_name=_('Website'), blank=True, null=True, default=None)
...     comment = models.TextField(verbose_name=_('Comment'), blank=True, null=True, default=None)
...
...     def __str__(self):
...         return f'{self.firstname} {self.lastname}'
...
...     class Meta:
...         verbose_name = _('Customer')
...         verbose_name_plural = _('Customers')

5.2.1. Arguments

  • blank

  • choices

  • db_column

  • db_index

  • default

  • editable

  • error_message

  • help_text

  • limit_choices_to

  • max_length

  • null

  • primary_key

  • unique

  • validators

  • verbose_name

5.2.2. SlugField

name = 'Apple MacBook Pro 13" SSD 4TB'

sligify(name)  # 12345,apple-macbook-pro-13-ssd-4tb  # good
sligify(name)  # apple-macbook-pro-13-ssd-4tb,12345  # better
example.com/macbook-pro-13-ssd-4tb,12345
>>> 
... class Customer(models.Model):
...     firstname = models.CharField(verbose_name=_('First Name'), max_length=50)
...     lastname = models.CharField(verbose_name=_('Last Name'), max_length=50, db_index=True)
...     username = models.SlugField(verbose_name=_('Username'), max_length=50, unique=True)
...
...     def save(self, *args, **kwargs):
...         self.username = slugify(f'{self.firstname}.{self.lastname}')
...         return super().save(*args, **kwargs)