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