无法分配“<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000002523CE84E48>>”:"Balance.user" 必须是 "User" 实例
Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000002523CE84E48>>": "Balance.user" must be a "User" instance
我正在处理我的 django 网站的钱包余额 ASPECT。我想要这样一种情况,只要新用户在网站上注册,他的钱包余额就会设置为“0”,但我的代码会抛出上述错误。请协助。
VIEW
@unauthenticated_user
def registration(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
group = Group.objects.get(name='customer')
user.groups.add(group)
Customer.objects.create(
user=user,
name=user.username,
)
instance = Balance(user=request.user, balance=10)
instance.save()
messages.success(request, 'Account was created for ' + username)
return redirect('loginuser')
context = {'form': form}
return render(request, 'account/registration.html', context)
型号
class Balance(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
balance = models.IntegerField()
def __str__(self):
return str(self.user) if self.user else ''
回溯
Traceback (most recent call last):
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\ienovo\Domination\accounts\decorators.py", line 12, in wrapper_func
return view_func(request, *args, **kwargs)
File "C:\Users\ienovo\Domination\accounts\views.py", line 64, in registration
instance = Balance(user=request.user, balance=10)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\db\models\base.py", line 482, in __init__
_setattr(self, field.name, rel_obj)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 219, in __set__
self.field.remote_field.model._meta.object_name,
Exception Type: ValueError at /registration/
Exception Value: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000002523CE84E48>>": "Balance.user" must be a "User" instance.
您在 registration()
视图中分配了错误的 user
:
# in your views.py
instance = Balance(user=request.user, balance=10)
您上面的代码在您的请求对象中引用了用户,在本例中是未经身份验证的用户 django.contrib.auth.models.AnonymousUser
。如果你想引用新创建的用户,你应该使用CreateUserForm
刚创建的user
对象:
instance = Balance(user=user, balance=10)
我正在处理我的 django 网站的钱包余额 ASPECT。我想要这样一种情况,只要新用户在网站上注册,他的钱包余额就会设置为“0”,但我的代码会抛出上述错误。请协助。
VIEW
@unauthenticated_user
def registration(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
group = Group.objects.get(name='customer')
user.groups.add(group)
Customer.objects.create(
user=user,
name=user.username,
)
instance = Balance(user=request.user, balance=10)
instance.save()
messages.success(request, 'Account was created for ' + username)
return redirect('loginuser')
context = {'form': form}
return render(request, 'account/registration.html', context)
型号
class Balance(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
balance = models.IntegerField()
def __str__(self):
return str(self.user) if self.user else ''
回溯
Traceback (most recent call last):
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\ienovo\Domination\accounts\decorators.py", line 12, in wrapper_func
return view_func(request, *args, **kwargs)
File "C:\Users\ienovo\Domination\accounts\views.py", line 64, in registration
instance = Balance(user=request.user, balance=10)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\db\models\base.py", line 482, in __init__
_setattr(self, field.name, rel_obj)
File "C:\Users\ienovo\Domination\venv\lib\site-packages\django\db\models\fields\related_descriptors.py", line 219, in __set__
self.field.remote_field.model._meta.object_name,
Exception Type: ValueError at /registration/
Exception Value: Cannot assign "<SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x000002523CE84E48>>": "Balance.user" must be a "User" instance.
您在 registration()
视图中分配了错误的 user
:
# in your views.py
instance = Balance(user=request.user, balance=10)
您上面的代码在您的请求对象中引用了用户,在本例中是未经身份验证的用户 django.contrib.auth.models.AnonymousUser
。如果你想引用新创建的用户,你应该使用CreateUserForm
刚创建的user
对象:
instance = Balance(user=user, balance=10)