Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django用户使用自定义用户模型注册无效_Python_Django_Django Class Based Views_Django Users - Fatal编程技术网

Python Django用户使用自定义用户模型注册无效

Python Django用户使用自定义用户模型注册无效,python,django,django-class-based-views,django-users,Python,Django,Django Class Based Views,Django Users,我有一个Django自定义用户模型“es_user”,它继承了Django的默认用户模型。当用户注册时,它可以正常工作,但该用户将是“用户”的一部分,并且不会添加任何内容到es_用户。因此,每次用户注册时,我都必须进入管理面板,将已登录的“用户”添加到“es_用户” 为了解决这个问题,我将这2行添加到views.py es_user_instance = es_user.objects.create(user= req_user) es_user_instance.save() class

我有一个Django自定义用户模型“es_user”,它继承了Django的默认用户模型。当用户注册时,它可以正常工作,但该用户将是“用户”的一部分,并且不会添加任何内容到es_用户。因此,每次用户注册时,我都必须进入管理面板,将已登录的“用户”添加到“es_用户”

为了解决这个问题,我将这2行添加到views.py

 es_user_instance = es_user.objects.create(user= req_user)
 es_user_instance.save()
class es_user(models.Model):
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
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})
class SignUpForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password')
这给了我这个错误

ValueError at /signup/

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

 es_user_instance = es_user.objects.create(user= req_user)
 es_user_instance.save()
class es_user(models.Model):
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
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})
class SignUpForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password')
forms.py

 es_user_instance = es_user.objects.create(user= req_user)
 es_user_instance.save()
class es_user(models.Model):
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
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})
class SignUpForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('username', 'email', 'password')
谁能告诉我哪里出了问题


注意:我使用了此自定义用户模型,因为稍后我将向“es_user”添加更多字段。

问题在于
req_user=request。由于您尚未登录该用户,用户
正在返回一个
匿名用户
。因此,在使用
request.user
之前,首先

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

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

谢谢@damores我已经尝试了你建议的两种方法,效果很好