I work with django 1.8.7 and python 2.7 . I have peoblem with migrate. when I migrate my models , permission and contenttypes don't create automatically. error looks like this:
Traceback (most recent call last):
File "/home/mariocesar/Proyectos/Crowddeals/env/local/lib/python2.7/site-
packages/django/core/management/base.py", line 222, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/mariocesar/Proyectos/Crowddeals/env/local/lib/python2.7/site-
packages/django/core/management/base.py", line 252, in execute
output = self.handle(*args, **options) File"/home/mariocesar/Proyectos/Crowddeals/crowddeals/core/management/commands/update_pe
rmissions.py", line 29, in handle
create_permissions(app, get_models(), options.get('verbosity', 0))
File "/home/mariocesar/Proyectos/Crowddeals/env/local/lib/python2.7/site-
packages/django/contrib/auth/management/__init__.py", line 74, in create_permissions
for perm in _get_all_permissions(klass._meta, ctype):
File "/home/mariocesar/Proyectos/Crowddeals/env/local/lib/python2.7/site-
packages/django/contrib/auth/management/__init__.py", line 28, in
_get_all_permissions
_check_permission_clashing(custom, builtin, ctype)
File "/home/mariocesar/Proyectos/Crowddeals/env/local/lib/python2.7/site-
packages/django/contrib/auth/management/__init__.py", line 49, in
_check_permission_clashing
for codename, _name in custom:
ValueError: too many values to unpack
and when I change migrations file like this:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.contrib.auth.management import _get_builtin_permissions, _check_permission_clashing
from django.db import migrations, models
from django.conf import settings
def _get_all_permissions(opts, ctype):
"""
Returns (codename, name) for all permissions in the given opts.
"""
builtin = _get_builtin_permissions(opts)
custom = list(opts.permissions)
if any(isinstance(el, basestring) for el in custom):
custom = [custom]
_check_permission_clashing(custom, builtin, ctype)
return builtin + custom
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='JsonModel',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('data', models.CharField(max_length=1000000)),
('generatedtime', models.DateTimeField(auto_now_add=True, null=True)),
('title', models.CharField(max_length=200, null=True, blank=True)),
('type', models.IntegerField(default=0)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
],
options={
'permissions': (('view_jsonmodel', 'Can view jsonmodel'), ('view_jsonmodel_int', 'Can view jsonmodel_int')
},
),
]
def forwards(self, orm):
from django.contrib.auth import management
management._get_all_permissions = _get_all_permissions
and run command " python manage.py migrate " this is responsed:
Operations to perform:
Apply all migrations: (none)
Running migrations:
No migrations to apply.
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
Traceback (most recent call last):
File "manage.py", line 29, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 354, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 346, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 226, in handle
emit_post_migrate_signal(created_models, self.verbosity, self.interactive, connection.alias)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/sql.py", line 280, in emit_post_migrate_signal
using=db)
File "/usr/local/lib/python2.7/dist-packages/django/dispatch/dispatcher.py", line 189, in send
response = receiver(signal=self, sender=sender, **named)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/management/__init__.py", line 84, in create_permissions
for perm in _get_all_permissions(klass._meta, ctype):
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/management/__init__.py", line 24, in _get_all_permissions
_check_permission_clashing(custom, builtin, ctype)
File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/management/__init__.py", line 47, in _check_permission_clashing
for codename, _name in custom:
thanks for your help. :)
I find the solution, in other model.py apps when define custom permissions , my colleagues define custom permissions like this:
class Meta:
permissions = (
('view_log', 'Can view log'),
('view_failedloginlog', 'Can view failed login log'),
('view_loginlog', 'Can view login log'),
('view_loginattempt', 'Can view login attempt'),
('view_onlineusers', 'Can view online users')
)
although, type of permission should be tupe; this means permission should be define like this:
class Meta:
permissions = (
('view_log', 'Can view log'),
('view_failedloginlog', 'Can view failed login log'),
('view_loginlog', 'Can view login log'),
('view_loginattempt', 'Can view login attempt'),
('view_onlineusers', 'Can view online users'),
)
this "," is so important!!! :))