2016-01-12 4 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' 

Вы ожидаете, что ваша таблица будет называться auth_permission, который уже используется в Permission модели в django.contrib.auth приложении. Поэтому ошибка говорит:

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

Решение:

  • Выберите другое имя таблицы
  • Не указать имя таблицы, то это будет в виде <app>_<modelclass>
  • Другой очень плохой идеей было бы удалить django.contrib.auth от INSTALLED_APPS в settings.py, но тогда вы рискуете сломать много вещей, и вы, вероятно, действительно этого не хотите.
Смежные вопросы