2016-01-12 60 views
0

我想創建我的自定義權限和組模型下面的代碼,但是當我嘗試遷移我得到錯誤「django.db.utils.ProgrammingError:關係‘auth_permission’已經存在」如何在django中創建自定義權限和組模型?

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

您希望您的表將被命名其已被使用由django.contrib.auth應用的Permission模型auth_permission。這就是爲什麼錯誤說:

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

解決方案:

  • 選擇一個不同的表名
  • 不指定表名,那麼這將是在<app>_<modelclass>
  • 另一種形式非常糟糕的想法是從INSTALLED_APPSsettings.py中刪除django.contrib.auth,但那麼你冒險打破了很多東西,你可能真的不想這樣做。
相關問題