我创建了一个 django 应用程序,用户可以在其中通过注册表单进行注册。我创建了两个组 Admin Users 和 Staff Users。当任何用户注册时,他不会被分配到任何组。我想创建一个网页,其中将显示所有用户,用户名前面应该有一个下拉菜单,让登录用户( Admin User 组的成员,我会将此页面限制为仅限 Admin Users 组)以在可用组中选择该组。简而言之,Admin User 组的任何成员都应该能够添加未分配到任何组的任何其他成员。我需要关于 views.py 和 HTML 页面应该是什么样子的基本帮助。
请您参考如下方法:
不久前我也做过类似的事情。 这是模型、表单和 View 。有什么不明白的就问。
from django import forms
from django.db import models
from django.shortcuts import redirect
class Personnel(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
# other fields
class AddPersonnelToGroupForm(forms.Form):
personnels = forms.ModelMultipleChoiceField(
queryset=Personnel.objects.all(),
widget=forms.SelectMultiple(attrs={"class" : "form-control select-multiple"}))
def add_personnels_to_group(request, pk): # pk is group's pk
"""Recursively add personnels to a group"""
template = "personnel/add_personnels_to_group.html"
group = Group.objects.get(pk=pk)
if request.method == "POST":
form = AddPersonnelToGroupForm(request.POST)
if form.is_valid():
personnels = [Personnel.objects.get(pk=pk) for pk in request.POST.getlist("personnels", "")]
for personnel in personnels:
user = personnel.user
if user.groups.filter(id=group.id).count():
user.groups.remove(group)
else:
user.groups.add(group)
msg.append("{} added".format(personnel.display_name))
return redirect(wherever)
else:
form = AddPersonnelToGroupForm()
return render(request, template, {"form" : form, "group" : group})
编辑
from django import forms
from django.db import models
from django.contrib.auth.models import Group
from django.shortcuts import redirect
class Personnel(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
# other fields
class AddPersonnelToGroupForm(forms.Form):
personnels = forms.ModelMultipleChoiceField(
queryset=Personnel.objects.all(),
widget=forms.SelectMultiple(attrs={"class" : "form-control select-multiple"}))
group = forms.ModelChoiceField(
queryset=Group.objects.all(),
widget=forms.Select(attrs={"class" : "form-control select-multiple"})
)
def add_personnels_to_group(request): # pk is group's pk
"""Recursively add personnels to a group"""
template = "personnel/add_personnels_to_group.html"
# group = Group.objects.get(pk=pk) # replace this
if request.method == "POST":
form = AddPersonnelToGroupForm(request.POST)
if form.is_valid():
group = form.cleaned_data['group'] # replacement
personnels = [Personnel.objects.get(pk=pk) for pk in request.POST.getlist("personnels", "")]
for personnel in personnels:
user = personnel.user
if user.groups.filter(id=group.id).count():
user.groups.remove(group)
else:
user.groups.add(group)
msg.append("{} added".format(personnel.display_name))
return redirect(wherever)
else:
form = AddPersonnelToGroupForm()
return render(request, template, {"form" : form, "group" : group})
所以在你的表单模板中你需要有字段
{{ form.group }}
{{ form.personnels }}
