Django.fun

If an app has multiple models with the same field, whats the best practice for keeping things DRY?

For example, if I have 3 models that look like this:

class CallLog(models.Model):
    lead_id = models.BigIntegerField("Lead ID")
    #  other fields


class EmailLog(models.Model):
    lead_id = models.BigIntegerField("Lead ID")
    #  other fields


class TextLog(models.Model):
    lead_id = models.BigIntegerField("Lead ID")
    #  other fields

Do I add lead_id to each model individually or is there a way to only type it once?

Yes, you can define an abstract base class [Django-doc]:

class LeadId(models.Model):
    lead_id = models.BigIntegerField("Lead ID")

    class Meta:
        abstract = True

and then inherit this in the other models:

class CallLog(LeadId, models.Model):
    # other fields…


class EmailLog(LeadId, models.Model):
    # other fields…


class TextLog(LeadId, models.Model):
    # other fields…

You can define multiple such abstract base classes, and use multiple inheritance such that models inherit from multiple of such classes.

Tutorials

Современный Python: начинаем проект с pyenv и poetry

Настройка проекта Python — виртуальные среды и управление пакетами

Использование requests в Python — тайм-ауты, повторы, хуки

Понимание декораторов в Python

ProcessPoolExecutor в Python: полное руководство

map() против submit() с ProcessPoolExecutor в Python

Понимание атрибутов, словарей и слотов в Python

Полное руководство по slice в Python

Выпуск Django 4.0

Безопасное развертывание приложения Django с помощью Gunicorn, Nginx и HTTPS

Автоматический повтор невыполненных задач Celery

Django REST Framework и Elasticsearch

Докеризация Django с помощью Postgres, Gunicorn и Nginx

Асинхронные задачи с Django и Celery

Релизы безопасности Django: 3.2.4, 3.1.12 и 2.2.24

Выпуски исправлений ошибок Django: 3.2.3, 3.1.11 и 2.2.23

Эффективное использование сериализаторов Django REST Framework

Выпуски безопасности Django: 3.2.2, 3.1.10 и 2.2.22

Выпущенные релизы безопасности Django: 3.2.1, 3.1.9 и 2.2.21

Обработка периодических задач в Django с помощью Celery и Docker

View all tutorials →