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)
我在尝试使用通用 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)