使用自定义用户模型的Django用户注册不起作用

时间:2019-03-24 08:31:08

标签: python django django-class-based-views django-users

我有一个Django自定义用户模型'es_user',该模型继承了Django的默认用户模型。当用户注册后,它可以正常运行,但该用户将成为“用户”的一部分,并且不会增加es_user的费用。因此,每次用户注册时,我都必须转到管理面板,然后将已登录的“用户”添加到“ es_user”。

因此,为了解决这一问题,我将这两条添加到 views.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)

views.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 个答案:

答案 0 :(得分:2)

问题是req_user = request.user返回AnonymousUser是因为您尚未登录用户。因此,在使用request.user之前,请先使用login the user

或者,您可以只添加刚刚创建的用户而无需登录:

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