Как наследовать mongoengine.django.auth.User для пользовательской модели пользователя?

Я новичок в джанго. Я использую django, mongoengine, django-social-auth для создания системы аутентификации и хранения профиля пользователя в mongodb.

Я использую механизм «Пользовательская модель пользователя», предоставляемый django, следующим образом:

from mongoengine import *
from mongoengine.django.auth import User

class UserProfile(User):

    imageUrl = URLField()

    def __init__(self):
        User.__init__()

settings.py включает («пользователи» — это имя приложения):

SOCIAL_AUTH_USER_MODEL = 'users.UserProfile'

Когда я запускаю «python manage.py runserver», я получаю следующую ошибку:

social_auth.usersocialauth: 'user' has a relation with model users.UserProfile, which has either not been installed or is abstract.

Когда я изменяю свой класс UserProfile для наследования от models.Model следующим образом:

from mongoengine import *
from mongoengine.django.auth import User
from django.db import models

class UserProfile(models.Model):

    imageUrl = URLField()

    def __init__(self):
        User.__init__()

, запустив 'python manage.py runserver', сервер разработки запустился без проблем.

Итак, я думаю, пользовательская модель пользователя должна быть унаследована от models.Model. Итак, как мне обойти, чтобы наследовать мою пользовательскую модель пользователя от mongoengine.django.auth.User.


person Skandh    schedule 15.06.2013    source источник


Ответы (1)


Из того, что я вижу, вы просто создаете UserProfile с отношением один к одному, чтобы построить модель пользователя из django. Так что это неправда:

 SOCIAL_AUTH_USER_MODEL = 'users.UserProfile'

Вы должны создать свою собственную модель пользователя. Подпишитесь на это.

Пример:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin

class User(AbstractBaseUser, PermissionsMixin):

    username = models.CharField(unique=True, max_length=45, db_index=True)
    first_name = models.CharField(max_length=45)
    last_name = models.CharField(max_length=45)
    email = models.EmailField(unique=True)
    status = models.SmallIntegerField()
    activation_code = models.CharField(max_length=50, null=True, blank=True)
    is_active = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True, editable=False)
    updated_at = models.DateTimeField(auto_now=True)
    login_at = models.DateTimeField()

    def __unicode__(self):
        return self.username

    def get_fullname(self):
        return '%s %s' % (self.first_name, self.last_name)

    def get_shortname(self):
        return self.first_name

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']
person Piotr Kowalczuk    schedule 15.06.2013