Python 为什么信号在错误的时间触发?
我正在创建一个信号,为Python 为什么信号在错误的时间触发?,python,django,model,django-signals,Python,Django,Model,Django Signals,我正在创建一个信号,为用户创建一个配置文件,考虑到他们所在的组。 例如,如果他们的用户在TEACHER组中,则会为其创建TEACHER\u配置文件 问题是,在设置用户的组之前触发的信号给了我错误“非类型”对象没有属性“名称” #views.py def register_page(request): if request.POST: password = request.POST['password'] repassword = request.POST[
用户
创建一个配置文件,考虑到他们所在的组
。
例如,如果他们的用户在TEACHER
组中,则会为其创建TEACHER\u配置文件
问题是,在设置用户的组
之前触发的信号给了我错误“非类型”对象没有属性“名称”
#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, 'پسورد ها مطابقت ندارند')
我已经尝试了m2m\u changed
,它为set\u password
带来了其他问题,它使用户实例None类型
,因为应该保存它来触发m2m\u 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, 'پسورد ها مطابقت ندارند')
另外,如果你想让它更具可读性,只需将它提取到单独的函数中即可
这对您有用吗?M2Ms在实例保存后保存,您很可能会面临多对多关系的其他问题,即使您要解决这个问题,一个选项可能是同时使用m2m_changed和post_save,但这样您将执行多次,没有其他解决方法了?感谢您的回答,它是有效的。但最好能使用信号。因为干的东西。
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, 'پسورد ها مطابقت ندارند')