Как перехватить сигнал создания БД из django

#django #django-models #django-admin

#django #django-модели #django-admin

Вопрос:

Я работаю в проекте django. У меня есть 1 SQL-файл postgresql, который нужно запускать только один раз после создания БД. Встроенный сигнал django не совсем подходит для моего случая. Итак, я пытаюсь написать пользовательский сигнал django, но я не уверен, как начать с этого случая. У кого-нибудь есть хорошее руководство. ? 🙂

Комментарии:

1. Не работает ли у вас начальный перехват данных SQL?

2. Я не уверен в этом подходе. Но мне нужно, чтобы он запускался только один раз. Будет ли это работать так, как я ожидаю?

Ответ №1:

Документы Django по сигналам значительно улучшились, поэтому загляните туда, если вы еще этого не сделали. Процесс довольно прост.

Сначала создайте свой сигнал ( providing_args позволяет указать аргументы, которые будут переданы при последующей отправке вашего сигнала):

 import django.dispatch
my_signal = django.dispatch.Signal(providing_args=["first_arg", "second_arg"])
  

Во-вторых, создайте функцию приемника:

 from django.dispatch import receiver

@receiver(my_signal)
def my_callback(sender, first_arg, second_arg, **kwargs):
    # do something
  

Наконец, отправьте свой сигнал куда угодно в своем коде ( self поскольку sender применим только в вашем классе модели. В противном случае просто передайте имя класса модели):

 my_signal.send(sender=self, first_arg='foo', second_arg='bar')
  

Комментарии:

1. Поскольку у него есть одноразовый вариант использования, вы также должны указать ему на документацию по созданию команды, чтобы он мог генерировать сигнал по требованию.