Регистрация пользователя в Django с использованием пользовательской модели не работает - PullRequest
2 голосов
/ 24 марта 2019

У меня есть пользовательская модель Django 'es_user', которая наследует пользовательскую модель Django по умолчанию.когда пользователь регистрируется, он работает нормально, но этот пользователь будет частью «Users», и ничто не добавит до es_user.поэтому каждый раз, когда пользователь регистрируется, я должен зайти в админ-панель и добавить зарегистрированного пользователя 'user' в 'es_user'.

Итак, чтобы решить, что я добавил эти 2 в строки в представлениях.py

 es_user_instance = es_user.objects.create(user= req_user)
 es_user_instance.save()

, которая дает мне эту ошибку

ValueError at /signup/

Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7f9c787b9be0>>": "es_user.user" must be a "User" instance.

models.py

class es_user(models.Model):
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)

просмотров.py

def signup(request):
signup_form_instance = SignUpForm()

if request.method == "POST":

    signup_form_instance = SignUpForm(request.POST)
    if signup_form_instance.is_valid():
        signup_form_instance2 = signup_form_instance.save(commit = False)
        req_user = request.user
        signup_form_instance2.password = make_password(signup_form_instance.cleaned_data['password'])
        signup_form_instance2.save()
        es_user_instance = es_user.objects.create(user= req_user)
        es_user_instance.save()

        return index(request)#successful signup redirect or return
    else:
        print("SIGN UP FORM INVALID")

return render(request,'signup.html',{'signup_form':signup_form_instance})

forms.py

class SignUpForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password')

Может кто-нибудь сказать мне, в чем проблема

ПРИМЕЧАНИЕ: Я использовал эту пользовательскую модель пользователя, потому что позже я добавлю еще много полей в 'es_user'.

1 Ответ

2 голосов
/ 24 марта 2019

Проблема в том, что req_user = request.user возвращает AnonymousUser, потому что вы еще не вошли в систему. Поэтому перед использованием request.user, сначала войдите в систему пользователя .

В качестве альтернативы, вы можете просто добавить только что созданного пользователя без входа в систему:

es_user_instance = es_user.objects.create(user=signup_form_instance2)
...