AUTH_USER_MODEL ссылается на модель .. которая не была установлена и создана AbstractUser модели не могут войти в систему

AUTH_USER_MODEL ошибка решена в EDIT3. Пароли по-прежнему не сохранятся при создании пользователя через форму.

Я использую Django 1.5, играя с новыми функциями переопределения / расширения новых пользователей, и я не могу зарегистрировать новых пользователей через мою регистрационную форму - только через администратора. При регистрации через регистрационную форму я получаю следующую ошибку:

Manager isn't available; User has been swapped for 'poker.PokerUser'

models.py:

class PokerUser(AbstractUser):
    poker_relate = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
    token = models.EmailField()
    USER_CHOICES = (
        ('1', 'Staker'),
        ('2', 'Horse')
    )
    user_type = models.CharField(choices=USER_CHOICES, max_length=10)
    username1 = models.CharField(null=True, blank=True, max_length=40)
    username2 = models.CharField(null=True, blank=True, max_length=40)
    username3 = models.CharField(null=True, blank=True, max_length=40)
    username4 = models.CharField(null=True, blank=True, max_length=40)
    username5 = models.CharField(null=True, blank=True, max_length=40)

PokerUserForm Модель: I»

class PokerUserForm(UserCreationForm):
    class Meta:
        model = PokerUser
        fields = ('username','password1','password2','email','user_type','token','username1','username2','username3','username4','username5',)

мы пытались изменить модель вPokerUserForm модель для использованияget_user_model() вместо явного определения модели путем установкиmodel = get_user_model() вместоmodel = PokerUser но тогда я получаю следующую ошибку:

django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL refers to model 'poker.PokerUser' that has not been installed

мойAUTH_USER_MODEL настроен в моемsettings.py вот так:

AUTH_USER_MODEL = 'poker.PokerUser'

На мы идем - мой вид регистрации в:views.py

def UserRegistration(request):
    player = PokerUser()

    if request.method == 'POST':
        form = PokerUserForm(request.POST, instance=player)
        if form.is_valid():
            player.email_address = form.cleaned_data['email']
            player.user_type = form.cleaned_data['user_type']
            # if player is staker, token is their own email. otherwise their token is their staker's email and
            # their relation is their staker
            if player.user_type == '1' or player.user_type == 'staker':
                player.token = player.email_address
            else:
                player.token = form.cleaned_data['token']
                staker = PokerUser.objects.get(email=player.token)
                player.poker_relate = staker
            player.save()
            return HttpResponseRedirect('/')
    else:
        form = PokerUserForm()
    initialData = {'form': form}
    csrfContext = RequestContext(request, initialData)
    return render_to_response('registration/register.html', csrfContext)

EDIT1:

Согласно документам,UserCreationForm должен быть воссоздан для использования с пользовательскими классами пользователя.

Я преодолел весьUserCreationForm следующее:

class UserCreationForm(forms.ModelForm):
    """
    A form that creates a user, with no privileges, from the given username and
    password.
    """
    error_messages = {
        'duplicate_username': _("A user with that username already exists."),
        'password_mismatch': _("The two password fields didn't match."),
        }
    username = forms.RegexField(label=_("Username"), max_length=30,
        regex=r'^[\w.@+-]+

И это смогло решить эту ошибку:

The Manager isn't available; User has been swapped for 'poker.PokerUser'

Теперь пользователи создаются, но не могут войти в систему. Когда я проверяю пользователей в админке, кажется, что вся информация верна, за исключением пароля. Добавление пароля вручную в админке, похоже, не работает правильно. Тем не менее добавление пользователей через админа работает корректно.

РЕДАКТИРОВАТЬ 2: Я

Я по-прежнему не могу войти в систему, так как любая из моих моделей AbstractUser создана через регистрационную форму. Я полностью переопределилUserCreationForm как указано выше, и я не могу реализоватьget_user_model() с этой ошибкой:

AUTH_USER_MODEL refers to model 'poker.PokerUser' that has not been installed

Код Джанго дляget_user_model() является:

 def get_user_model():
    "Return the User model that is active in this project"
    from django.conf import settings
    from django.db.models import get_model

    try:
        app_label, model_name = settings.AUTH_USER_MODEL.split('.')
    except ValueError:
        raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'")
    user_model = get_model(app_label, model_name)
    if user_model is None:
        raise ImproperlyConfigured("AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL)
    return user_model

Так как у меня естьAUTH_USER_MODEL = 'poker.PokerUser' настроить в моемsettings.py, это должно работать. Я'мы проверили это через консоль Django:

>>> from django.contrib.auth import get_user_model
>>> settings.AUTH_USER_MODEL
Out[14]: 'poker.PokerUser'
>>> from django.db.models import get_model
>>> app_label, model_name = settings.AUTH_USER_MODEL.split('.')
>>> user_model = get_model(app_label, model_name)
>>> user_model
Out[18]: poker.models.PokerUser

Однако реализация по-прежнему не работает правильно.

Если ты'прочитал это далеко, спасибо!

EDIT3:

AUTH_USER_MODEL refers to model 'poker.PokerUser' that has not been installed был исправлен Я случайноUserCreationForm что я воссоздал вpoker.models вместоregistration.formsпоэтому, когда я побежалget_user_model() который был назначенpoker.PokerUser, это не моглоне могу решить, так как он уже был в этом месте.

Теперь остается только одна проблема - при создании новых пользователей их пароли не сохраняются. Я'мы сузили его до одного метода вUserCreationForm разместив печатные заявления здесь:

def clean_password2(self):
    password1 = self.cleaned_data.get("password1")
    print password1
    password2 = self.cleaned_data.get("password2")
    print password2
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError(
            self.error_messages['password_mismatch'])
    print password2
    return password2

def save(self, commit=True):
    user = super(UserCreationForm, self).save(commit=False)
    user.set_password(self.cleaned_data["password1"])
    print self.cleaned_data["password1"]
    if commit:
        user.save()
    return user

print password1 а такжеprint password1 заявления вclean_password2 отобразить простой текстовый пароль, ноprint self.cleaned_data["password1"] вsave Метод пуст. Почему данные моей формы не передаются в метод сохранения?

TL; DR AbstractUser Создание модели работает как в Admin, так и через регистрационную форму, но только пользователи, созданные через Admin, могут войти в систему. Пользователи, созданные с помощью регистрационной формы, не могут войти в систему и, по-видимому, сохраняются без пароля - вся остальная информация сохраняется правильно.

, help_text=_("Required. 30 characters or fewer. Letters, digits and " "@/./+/-/_ only."), error_messages={ 'invalid': _("This value may contain only letters, numbers and " "@/./+/-/_ characters.")}) password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput) password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput, help_text=_("Enter the same password as above, for verification.")) class Meta: model = PokerUser fields = ('username','password1','password2','email','user_type','token','username1','username2','username3','username4','username5',) def clean_username(self): # Since User.username is unique, this check is redundant, # but it sets a nicer error message than the ORM. See #13147. username = self.cleaned_data["username"] try: PokerUser.objects.get(username=username) except PokerUser.DoesNotExist: return username raise forms.ValidationError(self.error_messages['duplicate_username']) def clean_password2(self): password1 = self.cleaned_data.get("password1") password2 = self.cleaned_data.get("password2") if password1 and password2 and password1 != password2: raise forms.ValidationError( self.error_messages['password_mismatch']) return password2 def save(self, commit=True): user = super(UserCreationForm, self).save(commit=False) user.set_password(self.cleaned_data["password1"]) if commit: user.save() return user

И это смогло решить эту ошибку:

The Manager isn't available; User has been swapped for 'poker.PokerUser'

Теперь пользователи создаются, но не могут войти в систему. Когда я проверяю пользователей в админке, кажется, что вся информация верна, за исключением пароля. Добавление пароля вручную в админке, похоже, не работает правильно. Тем не менее добавление пользователей через админа работает корректно.

РЕДАКТИРОВАТЬ 2: Я

Я по-прежнему не могу войти в систему, так как любая из моих моделей AbstractUser создана через регистрационную форму. Я полностью переопределилUserCreationForm как указано выше, и я не могу реализоватьget_user_model() с этой ошибкой:

AUTH_USER_MODEL refers to model 'poker.PokerUser' that has not been installed

Код Джанго дляget_user_model() является:

 def get_user_model():
    "Return the User model that is active in this project"
    from django.conf import settings
    from django.db.models import get_model

    try:
        app_label, model_name = settings.AUTH_USER_MODEL.split('.')
    except ValueError:
        raise ImproperlyConfigured("AUTH_USER_MODEL must be of the form 'app_label.model_name'")
    user_model = get_model(app_label, model_name)
    if user_model is None:
        raise ImproperlyConfigured("AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL)
    return user_model

Так как у меня естьAUTH_USER_MODEL = 'poker.PokerUser' настроить в моемsettings.py, это должно работать. Я'мы проверили это через консоль Django:

>>> from django.contrib.auth import get_user_model
>>> settings.AUTH_USER_MODEL
Out[14]: 'poker.PokerUser'
>>> from django.db.models import get_model
>>> app_label, model_name = settings.AUTH_USER_MODEL.split('.')
>>> user_model = get_model(app_label, model_name)
>>> user_model
Out[18]: poker.models.PokerUser

Однако реализация по-прежнему не работает правильно.

Если ты'прочитал это далеко, спасибо!

EDIT3:

AUTH_USER_MODEL refers to model 'poker.PokerUser' that has not been installed был исправлен Я случайноUserCreationForm что я воссоздал вpoker.models вместоregistration.formsпоэтому, когда я побежалget_user_model() который был назначенpoker.PokerUser, это не моглоне могу решить, так как он уже был в этом месте.

Теперь остается только одна проблема - при создании новых пользователей их пароли не сохраняются. Я'мы сузили его до одного метода вUserCreationForm разместив печатные заявления здесь:

def clean_password2(self):
    password1 = self.cleaned_data.get("password1")
    print password1
    password2 = self.cleaned_data.get("password2")
    print password2
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError(
            self.error_messages['password_mismatch'])
    print password2
    return password2

def save(self, commit=True):
    user = super(UserCreationForm, self).save(commit=False)
    user.set_password(self.cleaned_data["password1"])
    print self.cleaned_data["password1"]
    if commit:
        user.save()
    return user

print password1 а такжеprint password1 заявления вclean_password2 отобразить простой текстовый пароль, ноprint self.cleaned_data["password1"] вsave Метод пуст. Почему данные моей формы не передаются в метод сохранения?

TL; DR AbstractUser Создание модели работает как в Admin, так и через регистрационную форму, но только пользователи, созданные через Admin, могут войти в систему. Пользователи, созданные с помощью регистрационной формы, не могут войти в систему и, по-видимому, сохраняются без пароля - вся остальная информация сохраняется правильно.

Ответы на вопрос(3)

Ваш ответ на вопрос