2013-04-26 17 views
6

django 1.5.1admin.logentry: 'user' có một mối quan hệ với mô hình <class 'api.models.User'>, đã hoặc chưa được cài đặt hoặc là trừu tượng

tôi có thể tạo mô hình auth tùy chỉnh:

tập tin 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' 

tập tin 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', 

)

trên syncdb ./manage.py tôi nhận được một lỗi:

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

Làm thế nào quyết định vấn đề này?

Sửa 1 thử dòng chú thích và làm syncdb:

'django.contrib.admin', 

syncdb đã thành công sau đó cố gắng tạo người sử dụng trong vỏ ./manage.py

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

và lỗi • Nhận:

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

Trả lời

1

Bạn sẽ cần phải đặt một số app_label trên lớp học của bạn cũng trong số INSTALLED_APPS: hoặc đặt app_label = 'api' (mặc định) hoặc thêm 'custom_auth' vào INSTALLED_APPS của bạn (tất nhiên, nó cần phải là một ứng dụng hợp lệ sau đó).

Quy trình xác thực trong Django sẽ cố gắng để có được lớp người dùng mới bằng cách sử dụng get_model và theo mặc định get_model trả về mô hình chỉ cho các ứng dụng đã cài đặt. Bạn có thể xác minh với mã hiện tại của bạn:

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

Bạn quên để thêm mô tả app_label Meta của bạn vào INSTALLED_APPS:

# Application definition 

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

Bất kỳ ví dụ ...? – Lucio

Các vấn đề liên quan