receiving django post_migrate signal

前端 未结 3 1170
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-15 09:57

I\'m doing some kind of refactoring for my project, where I\'m relying on the django django.contrib.auth.models.Permission model. So far I define the permission

相关标签:
3条回答
  • 2020-12-15 10:36

    The Django docs recommend connecting the post_migrate signal in your app config's ready method. The Google groups post you link to is out of date, from before the docs were updated.

    You also need to specify the app config in your INSTALLED_APPS setting.

    INSTALLED_APPS = [
        'myapp.apps.MyAppConfig',
        # ...
    ]
    

    Another way to configure your app is to use default_app_config in __init__.py of your app. See Configuring Applications. But the other way (dotted path to AppConfig) is preferred.

    0 讨论(0)
  • 2020-12-15 10:43

    I have had done a post_migrate example for another question before. I will write down its solution. Maybe it will be helpful for you.

    # in apps.py
    
    ...
    from django.conf import settings
    from django.db.models.signals import post_migrate
    
    def create_default_site_profile(sender, **kwargs):
        """after migrations"""
        from django.contrib.sites.models import Site
        from core.models import SiteProfile
    
        site = Site.objects.get(id=getattr(settings, 'SITE_ID', 1))
    
        if not SiteProfile.objects.exists():
            SiteProfile.objects.create(site=site)
    
    class CoreConfig(AppConfig):
        name = 'core'
    
        def ready(self):
            post_migrate.connect(create_default_site_profile, sender=self)
            
            # if you have other signals e.g. post_save, you can include it 
            # like the one below.
            from .signals import (create_site_profile)  
    
    0 讨论(0)
  • 2020-12-15 10:45

    Signal post_migrate is different from other signals. './manage.py' command will not execute the code from the apps.py files or the signals.py files To execute this signal, place it in the models.py file. Then you will get the desired result

    0 讨论(0)
提交回复
热议问题