【发布时间】:2020-10-09 11:30:31
【问题描述】:
考虑到他们所在的group,我正在创建一个为user 创建配置文件的信号。
例如,如果他们的用户在 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 信号。
我们将不胜感激。
【问题讨论】:
-
M2M 在保存实例后保存,即使您解决了这个问题,您也很可能会面临多对多关系的其他问题,一个选项可能是同时使用 m2m_changed 和 post_save,但这多次执行的方式
-
没有其他问题?
标签: python django model django-signals