如何解决Profile() 在扩展 django 的用户模型时得到了一个意外的关键字参数“用户”
在这里,我使用配置文件模型扩展了 django 的用户模型,我想将此字段添加到用户模型中。 以下是文件。
models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user_ref = models.OneToOneField(User,on_delete=models.CASCADE)
pr1_points = models.IntegerField(default=0)
pr2_points = models.IntegerField(default=0)
@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
user = instance
if created:
profile = Profile(user=user)
profile.save()
@receiver(post_save,sender=User)
def save_profile(sender,**kwargs):
instance.profile.save()
views.py中注册函数如下:
'''
def postregister(request):
if request.POST:
first_name = request.POST.get('first_name')
last_name = request.POST.get('last_name')
email = request.POST.get('email')
username = request.POST.get('username')
password1 = request.POST.get('password1')
password2 = request.POST.get('password2')
if password1 == password2:
if User.objects.filter(username=username).exists():
messages.error(request,'Username is Taken Please Try Again')
return render(request,'signup.html')
elif User.objects.filter(email=email).exists():
messages.error(request,'Email is Taken Please Try Again')
return render(request,'signup.html')
else:
user = User.objects.create_user(username=username,first_name=first_name,last_name=last_name,email=email,password=password1)
user.save()
print('You are registered successfully,Please sign to continue.')
return redirect('login')
else:
messages.error(request,'Password is not matching Please Try Again')
return render(request,'signup.html')
else:
return redirect('register')
'''
因此,在创建新用户时,它给出了以下错误:Profile() 得到了意外的关键字参数“用户”。 所以请知道答案的人帮我解决这个问题。
这是错误的截图以供参考 [1]:https://i.stack.imgur.com/5qE4q.png
解决方法
您在 user_ref
模型中有 Profile
。
替换
profile = Profile(user=user)
与
profile = Profile(user_ref=user)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。