2013-04-26 4 views
6

Django 1.5.1admin.logentry: 'użytkownik' ma związek z klasy model < 'api.models.User'>, który albo nie został zainstalowany lub jest abstrakcyjna

utworzyć niestandardowy wzór auth:

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

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

)

na ./manage.py syncdb pojawia się błąd:

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

Jak decydowania ten problem?

Edycja 1 próbował linia komentarz i zrobić syncdb:

'django.contrib.admin', 

syncdb powiodła potem próbował utworzyć użytkownika w ./manage.py skorupy

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

i odbierać błąd:

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

Odpowiedz

1

Będziesz musiał ustawić na klasie klasę app_label, która jest także w twoim INSTALLED_APPS: albo ustaw app_label = 'api' (domyślnie), albo dodaj 'custom_auth' do twojej INSTALLED_APPS (oczywiście, musi to być wtedy poprawna aplikacja).

Proces sprawdzania poprawności w Django próbuje uzyskać nową klasę użytkownika za pomocą get_model, a domyślnie get_model zwraca modele tylko dla zainstalowanych aplikacji. Można zweryfikować z aktualnym kodem:

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

Zapomniałaś dodać Meta Description app_label do INSTALLED_APPS:

# Application definition 

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

Wszelkie przykład ...? – Lucio

Powiązane problemy