13👍
Apparently, Python is sensitive to the way you import modules. In my case, it wasn’t an issue with any of import code inside my blog application but an issue with the INSTALLED_APPS configuration, which I assume is used by Django to do an initial import.
Inside my blog application I was using imports such as:
from blog.models import *
My settings.py was configured as:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
...snip...
'sorl.thumbnail',
'mysite.blog',
)
The “mysite” prefix was added because I originally had import path issues when deploying the site. Later I fixed this issue (so it acted the same as the development server) by adding multiple paths in my WSGI script.
Removing the “mysite” prefix from the settings.py fixed the issue:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
...snip...
'sorl.thumbnail',
'blog',
)
9👍
While looking for the root of this problem, you can use quick workaround to prevent registering signal twice:
signals.post_save.connect(my_handler, MyModel, dispatch_uid="path.to.this.module")
- Django session expiry?
- How to add some extra fields to the page in django-cms? (in django admin panel)
1👍
Here is the ticket about this issue: Django’s signal framework may register listeners more than once #3951. It is now fixed in SVN version of Django.
The problem is exactly as You said: Your module which registers signal, is loaded couple of times, in some cases by different import paths, thus each imported modules this way are wrongly interpreted by Django as different modules which registers the same signal.
- How can I compare two fields of a model in a query?
- Error loading MySQLdb module: No module named 'MySQLdb'
- When should I use 'path' over 're_path'?
- Executing a Django Shell Command from the Command Line
- Override save_model on Django InlineModelAdmin