首页 > 解决方案 > Django - 将用户包含在组中的问题

问题描述

我正在使用django-groups-manager。

在我的项目中,用户可以在注册时创建一个组。注册后,用户可以进入自己创建的群组。注册后出现此错误。我怎么解决这个问题?

/accounts/register/ 处的类型错误

需要“组”实例,得到 <-组:技术->

视图.py

from groups_manager.models import Group, GroupType, Member

def register_view(request):
    form = RegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save()
        new_group_name = form.cleaned_data['new_group_name']
        new_group, created = Group.objects.update_or_create(name=new_group_name)
        user.groups.add(Group.objects.get(name=new_group_name))
        user.save()
        password = form.cleaned_data.get('password1')
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        return redirect('home')
    return render(request, 'accounts/form.html', {'form': form, 'title': 'Üye Ol'})

代码中有问题的地方:

user.groups.add(Group.objects.get(name=new_group_name)) 

标签: pythondjango

解决方案


您在这里混合了两个具有相同名称的模型:(1)Group来自 的模型django.contrib.auth.models,和 (2)Group来自 的模型groups_manager.models

Group您因此添加到的对象是第二 (2) 个变体user.groups.add(..)的对象。Group您可以通过从模块导入Group模型来解决此问题django.contrib.auth.models,例如通过不同的名称:

from groups_manager.models import Group, GroupType, Member
from django.contrib.auth.models import Group as AGroup

def register_view(request):
    form = RegisterForm(request.POST or None)
    if form.is_valid():
        user = form.save()
        new_group_name = form.cleaned_data['new_group_name']
        new_group, created = Group.objects.update_or_create(name=new_group_name)
        user.groups.add(AGroup.objects.get(name=new_group_name))
        user.save()
        password = form.cleaned_data.get('password1')
        new_user = authenticate(username=user.username, password=password)
        login(request, new_user)
        return redirect('home')
    return render(request, 'accounts/form.html', {'form': form, 'title': 'Üye Ol'})

推荐阅读