Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django中通过HTML模板将用户分配给组,而不是通过管理员_Python_Django_Django Models_Django Forms - Fatal编程技术网

Python 在django中通过HTML模板将用户分配给组,而不是通过管理员

Python 在django中通过HTML模板将用户分配给组,而不是通过管理员,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我创建了一个django应用程序,用户可以通过注册表单进行注册。我创建了两个组管理员用户和职员用户。当任何用户注册时,他不会被分配到任何组。我想创建一个显示所有用户的网页,在用户名前应有一个下拉列表,允许登录的用户(作为管理员用户组的成员,我将此页面仅限于管理员用户组)从可用组中选择组。简单地说,组管理员用户的任何成员都应该能够添加未分配到任何组的任何其他成员。我需要一个关于views.py和HTML页面应该是什么样子的基本帮助。不久前我做了类似的事情。 这是模型、形式和视图。询问是否有不清楚的

我创建了一个django应用程序,用户可以通过注册表单进行注册。我创建了两个组
管理员用户
职员用户
。当任何用户注册时,他不会被分配到任何组。我想创建一个显示所有用户的网页,在用户名前应有一个下拉列表,允许登录的用户(作为
管理员用户
组的成员,我将此页面仅限于
管理员用户
组)从可用组中选择组。简单地说,组
管理员用户的任何成员都应该能够添加未分配到任何组的任何其他成员。我需要一个关于views.py和HTML页面应该是什么样子的基本帮助。

不久前我做了类似的事情。 这是模型、形式和视图。询问是否有不清楚的地方

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})
编辑

因此,在表单的模板中,必须添加字段

{{ form.group }}
{{ form.personnels }}

如果你想进一步澄清这个问题,请询问考虑者,如果这个问题解决了你的问题,请接受这个答案。谢谢很抱歉我现在看到了你的答案。很抱歉延迟接受答案模板非常简单。只需一个简单的
{{form.personnels}
,django将使用
selectmultiple
小部件呈现它,这样您可以通过按住
ctrl
并单击来选择多个
人员。如果您曾经使用过django表单,那么您应该复制其中任何一个表单并替换表单字段。这样,用户就可以按照下拉列表中的选择被分配到特定的组?请尝试学习django教程。帮了我很多忙
{{ form.group }}
{{ form.personnels }}