如何解决为什么信号在错误的时间触发?
我正在创建一个信号,考虑到它们所在的user
为group
创建一个配置文件。
例如,如果他们的用户属于TEACHER
组,则将为此创建teacher_profile
。
问题在于设置了用户group
之前触发的信号,并给了我一个错误'NoneType' object has no attribute 'name'
。
#views.py
def register_page(request):
if request.POST:
password = request.POST['password']
repassword = request.POST['repassword']
username = request.POST['username']
GROUP = request.POST['group']
if password == repassword:
#creating user
user = User.objects.create(is_superuser=False,username=username)
user.groups.set([Group.objects.get(name=GROUP),])
user.set_password(password)
user.save()
#authenticating user
user = authenticate(username=username,password=password)
if user:
login(request,user)
return redirect('/esadra/user/dashboard/')
else:
messages.error(request,'پسورد ها مطابقت ندارند')
#models.py
@receiver(post_save,sender=User)
def user_profile_creator(sender,instance,created,*args,**kwargs):
if created:
if instance.groups.first().name == 'TEACHER':
profile = teacher.objects.create(user=instance)
elif instance.groups.objects.first().name == 'Student':
profile = student.objects.create(user=instance)
我尝试过m2m_changed
导致set_password
出现其他问题,它使用户实例None type
成为用户实例,因为应该保存它以触发m2m_changed
信号。
每个答案都将不胜感激。
解决方法
您可以尝试在视图中立即完成
def register_page(request):
if request.POST:
password = request.POST['password']
repassword = request.POST['repassword']
username = request.POST['username']
GROUP = request.POST['group']
if password == repassword:
#creating user
group = Group.objects.get(name=GROUP)
user = User.objects.create(is_superuser=False,username=username)
user.groups.set([group,])
user.set_password(password)
user.save()
if group.name == 'TEACHER':
teacher.objects.create(user=user)
elif group.name == 'Student':
student.objects.create(user=user)
#authenticating user
user = authenticate(username=username,password=password)
if user:
login(request,user)
return redirect('/esadra/user/dashboard/')
else:
messages.error(request,'پسورد ها مطابقت ندارند')
此外,如果您想使其更具可读性,只需将其提取到单独的函子等中即可。
这会帮你吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。