我有一个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'添加更多字段。
答案 0 :(得分:2)
问题是req_user = request.user
返回AnonymousUser
是因为您尚未登录用户。因此,在使用request.user
之前,请先使用login the user。
或者,您可以只添加刚刚创建的用户而无需登录:
es_user_instance = es_user.objects.create(user=signup_form_instance2)