首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django post_migrate信号被多次调用

Django post_migrate信号被多次调用
EN

Stack Overflow用户
提问于 2021-10-26 21:01:33
回答 1查看 84关注 0票数 0

我已经创建了一个post_migrate,其目标是在迁移运行时同步表中的所有数据。这是post_migrate文件的片段:

代码语言:javascript
复制
# signals.py
@receiver(post_migrate)
def full_sync_if_model_change(plan, **kwargs):
    if plan:
        models_set = set()
        for file, _ in plan:
            for model in file.operations:
                try:
                    model = SyncModel.objects.get(
                        app_name=file.app_label, model_name=model.model_name
                    )
                    models_set.add(model)
                except ObjectDoesNotExist:
                    pass
        print(models_set)
        if models_set:
            for model in models_set:
                model.set_full_sync()
                run_update_sync(model, False)
        return

但是,当我运行迁移时,它被调用了6次;正如您在迁移的输出中看到的那样:

代码语言:javascript
复制
evandro@evandro-340XAA-350XAA-550XAA:~/Desktop/.../test_service$ python3 manage.py migrateOperations to perform:
  Apply all migrations: admin, auth, contenttypes, django_cron, lakehouse_sync, sessions, test_models
Running migrations:
  Applying test_models.0019_auto_20211026_2052... OK
set()
set()
set()
set()
set()
set()

我还将在此处添加应用程序文件:

代码语言:javascript
复制
class LakeSyncConfig(AppConfig):
    name = "lake_sync"

    def ready(self):
        """Import signals"""
        import lakehouse_sync.core.delete_action

        from . import signals

我不知道该怎么做,我试图添加此返回语句,但它不起作用,因为函数总是被调用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-26 21:14:45

对于每个迁移的应用程序,即使没有任何更改,也会发送一次post_migrate信号。在连接信号时传递sender参数,以便在应用程序迁移后仅运行函数一次

代码语言:javascript
复制
def full_sync_if_model_change(plan, **kwargs):
    ...


class LakeSyncConfig(AppConfig):
    name = "lake_sync"

    def ready(self):
        post_migrate.connect(full_sync_if_model_change, sender=self)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69729925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档