我创建了一个django应用程序,用户可以通过SignUp Form注册。我创建了两个组Admin Users
和Staff Users
。当任何用户注册时,他没有被分配给任何组。我想创建一个网页,其中将显示所有用户,并且应该在用户名前面有一个下拉列表,这将允许登录用户(Admin User
组的成员,我将此页面限制为仅Admin Users
组)在可用组中选择组。简单来说,组Admin User
的任何成员都应该能够添加未分配给任何组的任何其他成员。我需要一个关于views.py和HTML页面应该是什么样子的基本帮助。
答案 0 :(得分:2)
不久前我做了类似的事情。 这是模型,形式和视图。询问是否有任何不清楚。
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 }}