Ответ 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.