Если приложение имеет несколько моделей с одним и тем же полем, какова наилучшая практика для сохранения DRY?

Например, если у меня есть 3 модели, которые выглядят следующим образом:

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

Нужно ли добавлять lead_id к каждой модели отдельно или есть способ ввести его только один раз?

Да, вы можете определить абстрактный базовый класс [Django-doc]:

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

    class Meta:
        abstract = True

и затем наследовать это в других моделях:

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


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


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

Вы можете определить несколько таких абстрактных базовых классов и использовать множественное наследование, чтобы модели наследовались от нескольких таких классов.

Вернуться на верх