社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django post_迁移信号被多次调用

Evandro Lippert • 3 年前 • 1514 次点击  

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

# 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次;从迁移的输出中可以看到:

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()

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

class LakeSyncConfig(AppConfig):
    name = "lake_sync"

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

        from . import signals

我不知道该怎么做,我试图添加这个return语句,但它不起作用,因为函数一直在被调用。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132590
 
1514 次点击  
文章 [ 1 ]  |  最新文章 3 年前