如何在django中创建自定义权限和组模型?

时间:2016-01-12 13:21:08

标签: python django

我正在尝试使用以下代码创建自定义权限和组模型,但是当我尝试迁移时出现错误" django.db.utils.ProgrammingError:relation" auth_permission"已经存在"

class Role(models.Model):
    def __unicode__(self):
        return self.name

    # slug          = models.CharField(max_length=50, primary_key=True)
    name = models.CharField(max_length=50, blank=True)

    class Meta:
        db_table = 'auth_group'


# ROLE_CHOICES = (('superuser', 'Super User'),('user', 'User'))

class Permission(models.Model):
    def __unicode__(self):
        return self.name

    codename = models.CharField(max_length=50, blank=False)
    name = models.CharField(max_length=50, blank=False)

    class Meta:
        db_table = 'auth_permission'

--------------------------- Settings.py ----------------- -----------

INSTALLED_APPS = (
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'rest_framework.authtoken',
    'django_filters',
    'sparkAuth',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

1 个答案:

答案 0 :(得分:1)

class Permission(models.Model):
    def __unicode__(self):
        return self.name

    codename = models.CharField(max_length=50, blank=False)
    name = models.CharField(max_length=50, blank=False)

    class Meta:
        db_table = 'auth_permission'

您希望您的表名为auth_permissionPermission应用中的django.contrib.auth模型已在使用该表。这就是错误说明的原因:

django.db.utils.ProgrammingError: relation "auth_permission" already exists

解决方案:

  • 选择其他表格名称
  • 不指定表名,然后它将采用<app>_<modelclass>
  • 的形式
  • 另一个非常糟糕的想法是从django.contrib.auth中的INSTALLED_APPS移除settings.py,但是你冒着破坏很多东西的风险,你可能真的不想要那样做。