A model with a …Model suffix ‹ antipattern ‹ Django antipatterns Fork me on GitHub

Often people use a …Model suffix for their model, for example:

from django.db import models

class CarModel(models.Model):
    # …
    pass

Why is it a problem?

Because objects from a model are not models, these are cars, not car models. Django will also construct verbose named based on the name of the class. Indeed, unless you specify verbose_name [Django-doc] and verbose_name_plural [Django-doc] yourself, Django will “unsnake” the name and thus give a verbose name like:

>>> CarModel._meta.verbose_name
'car model'
>>> CarModel._meta.verbose_name_plural
'car models'

This thus means that Django will ask questions in the model admin like:

Are you sure you want to remove this car model?

What can be done to resolve the problem?

Remove the …Model suffix. Django models are not supposed to have a …Model suffix, so:

from django.db import models

class Car(models.Model):
    # …
    pass