Добавление к "конструктору" модели django

Я хочу сделать дополнительную инициализацию, когда создаются экземпляры конкретной модели django. Я знаю, что переопределение __init__ может привести к проблемам. Какие еще альтернативы следует рассмотреть?

Обновить. Дополнительные сведения:. Цель состоит в том, чтобы инициализировать машину состояния, которую представляют экземпляры этой модели. Эта государственная машина предоставляется импортированной библиотекой, и ее внутреннее состояние сохраняется моей моделью django. Идея заключается в том, что всякий раз, когда модель загружается, конечный автомат автоматически инициализируется данными модели.

Ответ 1

Переопределение __init__ может работать, но это плохая идея, и это не путь Django.

Правильный способ сделать это в Django - это signals.

Те, которые вас интересуют в этом случае, это pre_init и post_init.

django.db.models.signals.pre_init

Всякий раз, когда вы создаете экземпляр Django модель, этот сигнал отправляется в начале моделей __init__()Метод.

django.db.models.signals.post_init

Как pre_init, но этот отправляется когда метод __init__(): завершает

Итак, ваш код должен быть чем-то вроде

from django.db import models
from django.db.models.signals import post_init

class MyModel(models.Model):
  # normal model definition...

def extraInitForMyModel(**kwargs):
   instance = kwargs.get('instance')
   do_whatever_you_need_with(instance)

post_init.connect(extraInitForMyModel, MyModel)

Вы также можете подключать сигналы к предопределенным моделям Django.