Django - 如何使用基于 Class 的视图将用户添加到组

Django - How add a user to a group with Class Based View

我在尝试使用通用 CreateView 将用户添加到特定组时遇到一些问题。 问题是我希望只有一个用户创建用户帐户并将他分配到一个组 表单呈现正确,似乎 select 正确的组没有问题,但是当我检查用户没有分配任何组时。我尝试了很多播种方式,但似乎都对我有用。

我不知道我应该用 (Post 方法)还是 form_valid() 我正在使用 CreateView 但我自己修改 class 不是很好, 请任何帮助

我使用的是默认用户,这是我创建的 class

Views.py
class CreateUserView(LoginRequiredMixin, CreateView):
    model = User
    form_class = CustomUserForm
    template_name = 'accounts/create_user.html'
    queryset = User.objects.all()

    def get_success_url(self):
        return reverse_lazy('accounts:list_user')

    def post(self, request, *args, **kwargs):
        if self.request.method == 'POST':
            form = self.form_class(self.request.POST)
            if form.is_valid():
                self.object = form.save(commit=False)
                # form_class  = self.get_form_class()
                # form        = self.get_form(form_class)
                # position = int(request.POST['groups'])-1
                # self.object.groups.add(position)
                my_group = Group.objects.get(name="Usuario Avanzado")
                my_group.user_set.add(self.object)
                self.object.save()
                return HttpResponseRedirect(self.get_success_url())
        return HttpResponseRedirect(self.get_success_url())

如有任何帮助,我将不胜感激

参考这个。在此每当创建新成员时,它都会将该成员分配给 Society 组

def User_registration(sender,instance,created,**kwargs):

    if created:
        
        print('Created')
        
        member = Group.objects.get(name = 'Society') #Society is Group name
        instance.groups.add(member)


        

        print('Member created')

post_save.connect(User_registration,sender=User)

访问了解更多详情:https://www.benlopatin.com/using-django-proxy-models/

#主模型

class SocietyUser(AbstractBaseUser,PermissionsMixin):

    class Types(models.TextChoices):
        MEMBER = "MEMBER", "Member"
        GATEKEEPER = "GATEKEEPER", "Gatekeeper"

    base_type = Types.MEMBER

    type = models.CharField(
        _("Type"), max_length=50, choices=Types.choices, default=base_type
    )
    society = models.ForeignKey(Society,null=True, blank =True,on_delete=models.CASCADE)
    society_user = models.CharField(max_length=200,unique=True)
    email = models.EmailField(_('email address'),unique=True)
    name = models.CharField(max_length=200,default=None)
    created_date = models.DateTimeField(default=timezone.now)
    
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    objects = CustomSocietyManager()
    USERNAME_FIELD = 'society_user'
    REQUIRED_FIELDS = ['society','name','email']


        
    def __str__(self):
        return self.society_user

#ProxyModels

class Member(SocietyUser):

  
    objects = MemberManager()

    class Meta:
        proxy = True
        permissions = (
            ('view_content', 'View content'),
            ('change_visitor', 'can change content'),
        )



class Gatekeeper(SocietyUser):

   
    objects = GatekeeperManager()

    class Meta:
        proxy = True

#信号

def member_registration(sender,instance,created,**kwargs):

    if created:
        
        print('Created')
        
        member = Group.objects.get(name = 'Society')
        instance.groups.add(member)

      
        

        print('Member created')

post_save.connect(member_registration,sender=Member)

def gatekeeper_registration(sender,instance,created,**kwargs):

    if created:
        
        print('Created')
        
        gatekeeper = Group.objects.get(name = 'Gatekeeper')
        instance.groups.add(gatekeeper)

        
        

        print('Gatekeeper created')

post_save.connect(gatekeeper_registration,sender=Gatekeeper)