60👍
✅
South does not track django.contrib.auth permissions. See ticket #211 for more information.
One of the comments on the ticket suggests that using the --all
option on syncdb may solve the problem.
48👍
If you want “manage.py migrate” to do everything (without calling syncdb –all). You need to create new permissions with a migration:
user@host> manage.py datamigration myapp add_perm_foo --freeze=contenttypes --freeze=auth
Edit the created file:
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
ct, created = orm['contenttypes.ContentType'].objects.get_or_create(
model='mymodel', app_label='myapp') # model must be lowercase!
perm, created = orm['auth.permission'].objects.get_or_create(
content_type=ct, codename='mymodel_foo', defaults=dict(name=u'Verbose Name'))
- [Django]-Django – SQL bulk get_or_create possible?
- [Django]-Celery : Execute task after a specific time gap
- [Django]-Django: Reverse for 'detail' with arguments '('',)' and keyword arguments '{}' not found
- [Django]-Getting TypeError: __init__() missing 1 required positional argument: 'on_delete' when trying to add parent table after child table with entries
- [Django]-Where are the Assertion Methods list from Django TestCase?
- [Django]-Redirect to named url pattern directly from urls.py in django?
20👍
You can connect to the post_migrate
signal in order to update the permissions after migration. I use the following code, slightly modified from Dev with Passion and originally from django-extensions.
# Add to your project-level __init__.py
from south.signals import post_migrate
def update_permissions_after_migration(app,**kwargs):
"""
Update app permission just after every migration.
This is based on app django_extensions update_permissions management command.
"""
from django.conf import settings
from django.db.models import get_app, get_models
from django.contrib.auth.management import create_permissions
create_permissions(get_app(app), get_models(), 2 if settings.DEBUG else 0)
post_migrate.connect(update_permissions_after_migration)
- [Django]-How can I run a celery periodic task from the shell manually?
- [Django]-Disable migrations when running unit tests in Django 1.7
- [Django]-Django connection to postgres by docker-compose
2👍
When i runnning migration with following code
ct, created = orm['contenttypes.ContentType'].objects.get_or_create(model='mymodel', app_label='myapp') # model must bei lowercase!
perm, created = orm['auth.permission'].objects.get_or_create(content_type=ct, codename='mymodel_foo')
I getting folloving error
File "C:\Python26\lib\site-packages\south-0.7.3-py2.6.egg\south\orm.py", line 170, in __getitem__
raise KeyError("The model '%s' from the app '%s' is not available in this migration." % (model, app))
KeyError: "The model 'contenttype' from the app 'contenttypes' is not available in this migration."
To prevent this error, i modified the code
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission
class Migration(DataMigration):
def forwards(self, orm):
"Write your forwards methods here."
ct = ContentType.objects.get(model='mymodel', app_label='myapp')
perm, created = Permission.objects.get_or_create(content_type=ct, codename='mymodel_foo')
if created:
perm.name=u'my permission description'
perm.save()
- [Django]-Test sending email without email server
- [Django]-Set Django IntegerField by choices=… name
- [Django]-Collectstatic error while deploying Django app to Heroku
Source:stackexchange.com