2013-04-26 1 views
6

Django 1.5.1admin.logentry: 'utente' ha una relazione con il modello <class 'api.models.User'>, che è o non è stato installato o astratto

creo il modello di autenticazione personalizzati:

file di api/models.py

from django.contrib.auth.models import BaseUserManager, AbstractUser 

class User(AbstractUser): 

    token = models.CharField(max_length=64, null=False, blank=False, help_text=_('Photo for carte'), unique=True) 
    updated_token = models.DateTimeField(auto_now_add=True, help_text=_('Create record')) 

    USERNAME_FIELD = 'email' 

    objects = MyUserManager() 

    def __unicode__(self): 
     return "пользователь: %s" % self.email 
    class Meta: 
     app_label = 'custom_auth' 

file di settings.py

AUTH_USER_MODEL = 'custom_auth.User' 
..... 
INSTALLED_APPS = (
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'api', 
..... 
'south', 
'django.contrib.admin', 

)

su ./manage.py syncdb ottengo un errore:

admin.logentry: 'user' has a relation with model <class 'api.models.User'>, which has either not been installed or is abstract. 

Come decidere questo problema?

Modifica 1 provato riga di commento e fare syncdb:

'django.contrib.admin', 

syncdb ha avuto successo dopo che ha cercato di creare utenti in guscio ./manage.py

In [1]: from api.models import User 
In [2]: User.objects.create_superuser('[email protected]', 'test') 

ed errore recieve:

DatabaseError: (1146, "Table 'app_name.custom_auth_user' doesn't exist") 

risposta

1

È necessario impostare un app_label nella classe che si trova anche nel proprio INSTALLED_APPS: impostare app_label = 'api' (valore predefinito) o aggiungere 'custom_auth' al numero INSTALLED_APPS (ovviamente, deve essere un'app valida quindi).

Il processo di convalida in Django tenta di ottenere la nuova classe Utente utilizzando get_model e, per impostazione predefinita, get_model restituisce modelli solo per app installate. È possibile verificare con il codice corrente:

>>> loading.get_model('custom_auth', 'user') 
>>> loading.get_model('custom_auth', 'user', only_installed=False) 
    > api.models.User 
0

Hai dimenticato di aggiungere il descrizione Meta app_label al INSTALLED_APPS:

# Application definition 

INSTALLED_APPS = (
    ... 
    'custom_auth', 
) 
+0

Qualsiasi esempio ...? – Lucio