Django 迁移错误:不要自动创建权限和内容类型

如何解决Django 迁移错误:不要自动创建权限和内容类型

我使用 django 1.8.7 和 python 2.7 。我有迁移问题。当我迁移我的模型时,权限和内容类型不会自动创建。 错误看起来像这样:

    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

当我像这样更改迁移文件时:

    # -*- 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,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

并运行命令“python manage.py migrate” 这是回应:

        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",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,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:

感谢您的帮助。 :)

解决方法

我找到了解决方案,在其他model.py应用程序中定义自定义权限时,我的同事定义了这样的自定义权限:

    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')
    )

虽然,权限类型应该是 tupe;这意味着权限应该像这样定义:

    class Meta:
    permissions = (
        ('view_log','Can view online users'),)

这个“,”太重要了!!! :))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?